我在努力打开一个文件,读每一行直到EOF。我使用的是nyquist,它基于XLISP,缺乏Common的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提供的信息和链接,我能够找到打开文件并逐行读取文件的典型代码:
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 (我不知道跟踪nil用于什么)return expressions的列表)中初始化和递增的,所有这些都是在退出时计算的,最后一个是返回的。在这种情况下,当returnedex == null和nil时,就会出现退出。在本例中,不言自明。注意:do*与do的不同之处在于它允许在一个表达式中分配的变量在以后的表达式中使用,比如在分配ex时如何使用fp。
我是一个完全的n00b在任何一种LISP,所以如果上面的任何一个是错误的,请说出来。
发布于 2012-01-20 22:06:05
Nyquist不是基于Common的。它的基础是一个早期的XLISP。它只支持简单的循环,而不支持Common的复杂循环。
见Nyquist手册:
http://www.cs.cmu.edu/~rbd/doc/nyquist/part19.html#226
它的循环语法是:
(loop expr...)它不支持Common的扩展循环语法。
https://stackoverflow.com/questions/8948237
复制相似问题