如何在Lisp中读取输入直到EOF

如何在Lisp中读取输入直到EOF,lisp,common-lisp,eof,Lisp,Common Lisp,Eof,如何在Lisp中读取输入流直到EOF?在C中,您可以这样做: while((c=getchar())!=EOF) { //循环体。。。 } 我希望能够将数据传输到我的Lisp程序,而不必事先指定数据大小。下面是我正在做的事情的一个例子: (dotimes(i*n*) (setf*t*(解析整数(读取行):允许垃圾t)) (如果(=(mod*t**k*)0)(incf*count*)) 在这个循环中,变量*n*指定我要传送到程序的行数(该值是从输入的第一行读取的),但我只想处理任

如何在Lisp中读取输入流直到EOF?在C中,您可以这样做:

while((c=getchar())!=EOF)
{
//循环体。。。
}       
我希望能够将数据传输到我的Lisp程序,而不必事先指定数据大小。下面是我正在做的事情的一个例子:

(dotimes(i*n*)
(setf*t*(解析整数(读取行):允许垃圾t))
(如果(=(mod*t**k*)0)(incf*count*))

在这个循环中,变量
*n*
指定我要传送到程序的行数(该值是从输入的第一行读取的),但我只想处理任意数量的未知行,当它到达流的末尾时停止。

read line
采用可选参数(
eof-error-p
)允许它在点击
eof
时返回
NIL
(默认)或用户指定的值(
eof值
),而不是发出错误信号

发件人:

只读和可选流eof-error-p eof值recursive-p

在上面列出的读取函数中,可选参数
EOF-ERROR-p
EOF-VALUE
指定当程序尝试从耗尽的流中读取时发生的情况。如果
EOF-ERROR-p
为真(默认值),则Lisp将在尝试读取耗尽的流时发出错误信号。如果
EOF-error-P
为NIL,则Lisp返回
EOF-VALUE
(默认值
NIL
),而不是发出错误信号

您可以将其用作函数的简单终止条件。

有关详细信息,请参阅HyperSpec

或者有时是零

(loop for line = (read-line stream nil nil)
      while line
      do ... )

@古斯塔夫伯特伦不确定你的意思。它仍然可以从我七年前在这个答案中发布的链接下载。我刚刚确认。
(loop for line = (read-line stream nil nil)
      while line
      do ... )