LISP/Nyquist打开文件并逐行读取

LISP/Nyquist打开文件并逐行读取,lisp,audacity,nyquist,Lisp,Audacity,Nyquist,我正在努力打开一个文件,读每一行直到EOF。我使用的是nyquist,它基于XLISP,并且在打开文件时缺少常见的Lisp。我的代码是: (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_f

我正在努力打开一个文件,读每一行直到EOF。我使用的是nyquist,它基于XLISP,并且在打开文件时缺少常见的Lisp
。我的代码是:

(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))
我从奈奎斯特得到的输出是:

error: unbound variable - LINE
我希望有人能帮助我理解我的错误所在


注: 我还尝试:

(loop for line = (read-line in_file nil)
但这给了:

error: too many arguments

更新: 使用Rainer Joswig提供的信息和链接,我能够找到打开文件并逐行读取的典型代码:

  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行和第2行-分配用于循环的变量、它们的初始值以及如何增加它们。在这种情况下,
    fp
    ex
    fp
    不递增,
    ex
    从fp开始初始化并递增一个
    read
    (我不知道后面的
    nil
    是什么意思)
  • 第3行-循环的退出条件,以及
    返回表达式的列表,所有这些表达式都在退出时进行计算,最后一个返回。在这种情况下,退出将在
    ex==null
    时发生,然后返回
    nil
  • 第4行-循环的实际主体。在这种情况下不言自明
  • 注:
    do*
    do
    的不同之处在于它允许在一个表达式中分配的变量在以后的表达式中使用,就像
    fp
    ex
    的分配中如何使用一样


    我在任何类型的LISP中都是一个完全的n00b,所以如果上面的任何一个是错误的,请大声说出来。

    Nyquist不是基于普通的LISP。它基于早期的XLISP。它只支持简单循环,不支持Common Lisp的复杂循环

    请参阅奈奎斯特手册:

    其循环语法为:

    (loop expr...)
    

    它不支持Common Lisp的扩展循环语法。

    Nyquist不是基于Common Lisp的。它基于早期的XLISP。它只支持简单循环,不支持Common Lisp的复杂循环

    请参阅奈奎斯特手册:

    其循环语法为:

    (loop expr...)
    
    它不支持Common Lisp的扩展循环语法