LISP/Nyquist открывает файл и читает построчно

Я изо всех сил пытаюсь открыть файл и читать каждую строку до EOF. Я использую nyquist, который основан на XLISP и не имеет Common Lisp's with-open-file, Мой код:

(let ((in_file (open "/home/soodesune/testfile.csv" :if-does-not-exist nil)))
    (loop for line = (read-line in_file)
         while line do (print line))
    (close in_file))

вывод, который я получаю из nyquist:

error: unbound variable - LINE

Я хотел бы помочь понять, где я иду не так


Примечание: я также попробовал:

(loop for line = (read-line in_file nil)

Но это дает:

error: too many arguments

ОБНОВИТЬ:

Используя информацию и ссылку, предоставленные Райнером Йосвигом, я смог найти типичный код, который можно использовать, чтобы открыть файл и прочитать его построчно:

  1 (do* ((fp (open "test.dat" :direction :input))
  2       (ex (read fp nil) (read fp nil)))
  3  ((null ex) (close fp) nil)
  4  (print ex))

do Функция состоит из трех основных частей:

  1. строки 1 и 2 - переменные, назначенные для использования в цикле, их начальные значения и способы их приращения. В этом случае fp а также ex, fp не увеличивается, и ex инициализируется и увеличивается на один read от из фп (я понятия не имею, что это трейлинг nil для)
  2. строка 3 - условие выхода из цикла и список return expressions все из которых оцениваются при выходе, и последний из которых возвращается. В этом случае выход произойдет, когда ex == null а потом nil будет возвращен
  3. строка 4 - фактическое тело цикла. Самоочевиден в этом случае.

нота: do* отличается от do тем, что позволяет использовать переменные, назначенные в одном выражении, в более позднем, например, как fp используется в назначении ex

Я всего лишь n00b на любом LISP, так что, если что-то из перечисленного неверно, пожалуйста, говорите.

1 ответ

Решение

Nyquist не основан на Common Lisp. Он основан на ранней XLISP. Он поддерживает только простой LOOP, а не комплексный LOOP Common Lisp.

Смотрите руководство Nyquist:

http://www.cs.cmu.edu/~rbd/doc/nyquist/part19.html

Синтаксис LOOP:

(loop expr...)

Он не поддерживает расширенный синтаксис LOOP Common Lisp.

Другие вопросы по тегам