Subject: Re: Newbie asking for help
From: Erik Naggum <>
Date: 2000/06/22
Newsgroups: comp.lang.lisp
Message-ID: <>

* The Glauber <>
| I'm having trouble going from the tutorials to the real world.  For
| example, a lot of what i do is related to processing text files.
| So, i though i'd write a simple/stupid program to count the number
| of lines in a file.  Here it is:
| ;; count number of lines in file key.html
| (with-open-file (ifile "key.html" :direction :input)
|                 (setf nlines 0)
|                 (loop
|                   (if (read-line ifile nil)
|                     (setf nlines (+ 1 nlines))
|                     (return nlines))))

  You're using a free variable, nlines, in this code.  You should not
  use a free variable unless you have very specific need for it.  This
  does not affect the correctness of your code, however.

| It doesn't work (it just hangs, so i think it's stuck in the loop).

  Try being explicit in the value of eof-value, i.e.

(read-line ifile nil nil)

| I thought it would read lines until the end of the file, when the
| read- line would return nil, and that would trigger the second form
| inside the if (a return, to get out of the loop).

  I think it would be instructive to print the value from read-line:

(print (read-line ifile nil))

  print returns its value.

| I'm sorry for posting something so stupid, but why doesn't this work?

  Seems like a bug in your Common Lisp implementation.  Which is it?

  If this is not what you expected, please alter your expectations.