lisp - 被普通 lisp 中的文件结束条件弄糊涂了

标签 lisp common-lisp

无法读取文本文件。

READ: 输入流 #1=# 已经结束 [类型 SYSTEM::SIMPLE-END-OF-FILE 的条件]

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

最佳答案

查看 HyperSpec 上的文档:

http://www.lispworks.com/documentation/HyperSpec/Body/f_rd_rd.htm

默认情况下,READREAD-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)))

关于lisp - 被普通 lisp 中的文件结束条件弄糊涂了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1904768/

相关文章:

macros - 嵌套在宏内的 let 中的 if 子句未按预期工作

list - LISP - 如何从嵌套列表中获取平均长度?一步一步的解释

functional-programming - 为什么这不在 Scheme 中评估?

haskell - 在编程语言和范例的上下文中, "Pure"是什么意思?

emacs - 关于 define-key 的一些混淆(以及何时引用参数的问题)

loops - Common Lisp dotimes 结果之谜

stack - 如何清空列表

escaping - 如何替换给定字符串内的任何转义字符(例如垂直制表符)

lisp - 如何在 Common Lisp 中返回变量的值和名称

lisp - "Don' t 知道如何从 : Symbol"error in Clojure 创建 ISeq