我正在努力打开一个文件,并读取每一行直到EOF。我使用的是基于XLISP的nyquist,而且缺少Common Lisp的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
使用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
函数有三个基本部分:
fp
和ex
。 fp
未递增,ex
已初始化并从fp增加一read
(我不知道尾随nil
是什么)return expressions
的列表,所有这些都在退出时进行评估,并返回最后一个。在这种情况下,当ex == null
然后nil
将被返回注意:do*
与do
的不同之处在于它允许在一个表达式中分配的变量在后一个表达式中使用,例如fp
在{{1}的赋值中的使用方式}}
我在任何一种LISP中总计n00b,所以如果上述任何一种错误,请说出来。
答案 0 :(得分:3)
奈奎斯特不是基于Common Lisp。它基于早期的XLISP。它只支持简单的LOOP,而不支持Common Lisp的复杂LOOP。
参见奈奎斯特手册:
http://www.cs.cmu.edu/~rbd/doc/nyquist/part19.html#226
其LOOP语法为:
(loop expr...)
它不支持Common Lisp的扩展LOOP语法。