如何在 Lisp 中读取输入直到 EOF
在 Lisp 中如何读取输入流直到 EOF?在 C 中,您可能会这样做:
while ((c = getchar()) != EOF)
{
// Loop body...
}
我希望能够将数据通过管道传输到我的 Lisp 程序,而不必提前指定数据大小。这是我现在正在做的事情的一个例子:
(dotimes (i *n*)
(setf *t* (parse-integer (read-line) :junk-allowed T))
(if (= (mod *t* *k*) 0) (incf *count*)))
在这个循环中,变量 *n*
指定我通过管道传输到程序的行数(该值是从输入的第一行读取的) ),但我想只处理任意且未知数量的行,在到达流末尾时停止。
How do I read an input stream until EOF in Lisp? In C, you might do it like this:
while ((c = getchar()) != EOF)
{
// Loop body...
}
I would like to be able to pipe data to my Lisp programs without having to specify the data size in advance. Here's an example from something I'm doing now:
(dotimes (i *n*)
(setf *t* (parse-integer (read-line) :junk-allowed T))
(if (= (mod *t* *k*) 0) (incf *count*)))
In this loop, the variable *n*
specifies the number of lines I'm piping to the program (the value is read from the first line of input), but I would like to just process an arbitrary and unknown number of lines, stopping when it reaches the end of the stream.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
请参阅 HyperSpec 的 READ-LINE
或有时使用 nil
See the HyperSpec for READ-LINE
or sometimes with nil
read-line 采用可选参数 (eof-error-p),允许它返回 NIL(默认)或用户指定的值(
eof-value
) 在遇到EOF
时,而不是发出错误信号。来自 《成功的 Lisp》第 19 章< /a>:
您可以使用它作为函数的简单终止条件。
read-line
takes an optional argument (eof-error-p
) allowing it to return eitherNIL
(default) or a user-specified value (eof-value
) on hitting anEOF
, instead of signalling an error.From Chapter 19 of Successful Lisp:
You can use this as a simple termination condition for your function.