loops - 为什么在循环宏中有一个 = 符号用于从文件中读取行?

标签 loops syntax common-lisp

我已经陷入困境,试图弄清楚如何在 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/

相关文章:

java - 如何在java中使用if-else语句创建do...while循环?

java - 将多个值读入数组错误

c++ - 当 cin 的输入是 'dot' 时 while 循环到无穷大

c++ -::::在C++中是什么意思?

loops - 为什么内循环收集不返回结果?

python - 给定索引列表时从列表中获取值的优化方法

ruby - 如何使用 ?创建字符串时 Ruby 中的语法

python - 为什么 (1 in [1,0] == True) 评估为 False?

profiling - CL : help identify profiler output

lisp - 将列表列表的元素定义为普通 lisp 中的新变量