This is a development version of sclint. Sclint is a lint-like program
for Scheme. As of now, there is virtually no documentation about
installing and using sclint. There is a shell script that uses Aubrey
Jaffer's scm interpreteer. The current version checks the following:

* Consistency of indentation
  
  It complains about code like

    (define (foo x)
    (if (= x 0)
	1
        (foo (- x 1))))

  Aside from teaching students to indent their code, this is helpful
  in situations where you accidentally leave out or add parenthesis.
  Happens to me when I do "minor corrections" to my code.

* Syntax of special forms (almost all of them)

  I put this in because most interpreters check syntax only when they
  execute code. This is especially annoying for students just learning
  to program.

* Number of arguments to primitive and most user-defined procedures

  Same as above. I find myself occasionally writing code like

   (if (= car x 0)
	...)

  which my lint now catches. It is not really very smart about this,
  but for straightforward code it works reasonably well. To do this
  part better, it would have to do at least some type analysis.

I have written the lint mostly as a tool to be used in teaching
programming. It is now in use in our introductory programming course
in Tampere University of Technology. I hope to get it to the stage
where it could give meaningful comments about code, such as suggesting

  (define (foo x)
    (let ((y (+ x 1))
	  (z (- x 1)))
      ...))

instead of

  (define (foo x)
     (define y 0)
     (define z 0)
     (set! y (+ x 1))
     (set! z (- x 1))
     ...)

I have really seen people write code like the above. I suspect it
comes from using Pascal-ideas to Scheme.

The current version of sclint is available for anonymous ftp at
cs.tut.fi:/pub/src/languages/schemes/. Any comments, bug reports and
suggestions are welcome.

Pertti Kellomaki, pk@cs.tut.fi
