我已经陷入困境,试图弄清楚如何在 common-lisp 中处理读取文件,因为答案似乎总是完全相同,而且我不理解 lisp 的循环宏语法或其他相关内容。 在下面的代码中(来自 this stackexchange answer for example,您会看到有一个“循环行 =(读取行)...”我不明白数字 = 符号在测试方面的含义。为什么是数字等号?read-line 返回什么数字?是 nil 和 T 数字吗?
(defun get-file (filename)
(with-open-file (stream filename)
(loop for line = (read-line stream nil)
while line
collect line)))
我一直直觉地认为“(loop for line in (read-line)...”会起作用,因为 read-line 返回一个字符串,但我猜想它实际上返回了值零,字符串只是它放在终端上的一些垃圾......但我不明白。 有人有见解吗?还是解决这种疯狂的方法?
最佳答案
(
开始一个 Lisp 表单
循环
这是LOOP
宏
for line = (read-line stream nil)
我们定义了一个局部变量 line
并且在每个 loop
迭代中它将被设置为 (read-line stream nil)
的结果.
(read-line stream nil)
以字符串形式返回一行,如果流位于 eof,则返回 nil
。
同时行
在每次迭代时检查它并在变量 line
不是 nil
时继续迭代
如果是nil
则退出loop
并返回结果。
收款行
对于每次迭代,将变量 line
的内容收集到一个列表中,稍后可以将其作为结果返回。
)
Lisp 形式结束
关于loops - 为什么在循环宏中有一个 = 符号用于从文件中读取行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57049944/