公共lisp中的文件结束条件使其神秘化

公共lisp中的文件结束条件使其神秘化,lisp,common-lisp,Lisp,Common Lisp,无法读取文本文件 读取:输入流#1=#已到达其末尾 [类型系统的条件::简单文件结尾] 意思是“已经到了尽头。”这意味着您已经读取了打开流的位置上的所有可用数据,然后尝试读取更多数据。查看HyperSpec上的文档: 默认情况下,READ,READ-CHAR,以及类似的函数将在流中没有更多数据可读取时,发出类型为END-of-FILE的条件信号 如果您希望它在尝试读取流结束时返回特定值,则需要将nil传递给函数的eof-error-p参数,将值、符号或关键字传递给函数的eof value参数;

无法读取文本文件

读取:输入流#1=#已到达其末尾 [类型系统的条件::简单文件结尾]


意思是“已经到了尽头。”

这意味着您已经读取了打开流的位置上的所有可用数据,然后尝试读取更多数据。

查看HyperSpec上的文档:

默认情况下,
READ
READ-CHAR
,以及类似的函数将在流中没有更多数据可读取时,发出类型为
END-of-FILE
的条件信号

如果您希望它在尝试读取流结束时返回特定值,则需要将
nil
传递给函数的
eof-error-p
参数,将值、符号或关键字传递给函数的
eof value
参数;当到达文件/流的末尾时,您将返回的数据

例如,如果您从一段文本中单独读取字符:

(with-open-file (s somefile :direction :input)
  (do ((c (read-char s nil :eof)
          (read-char s nil :eof)))
    ((eql c :eof) 'done)
    (process-char c)))

这是什么时候发生的?您试图读取的文件是什么?另外,请注意,
read
会将读取的文本解析为Lisp对象,如果文本无效,则会发出错误信号。