Common Lisp中read-line未返回预期字符串的问题咨询
问题解析与解决
首先明确read-line函数的核心行为:
- 当成功读取一行内容时,它仅返回一个值:不含末尾换行符的字符串。比如读取你的
file.txt第一行,返回值就是"abc"。 - 只有当到达文件末尾且未读取到任何字符时,才会返回你传入的第二个参数(这里是
nil)。
你看到的"abc"和NIL同时出现,大概率是对SBCL REPL输出的误解:
- REPL会打印表达式的返回值,如果你执行代码后看到
"abc"下一行是NIL,那NIL可能不是read-line的返回值,而是你后续输入的内容,或者是REPL环境的其他输出。 - 验证方式:执行
(with-open-file (stream "file.txt") (type-of (read-line stream nil))),会返回STRING,证明返回的确实是单个字符串值。
另外,确认你的代码没有语法错误:你写的(with-open-file (stream "file.txt") (read-line stream nil))是正确的,with-open-file会自动管理文件流,read-line调用也符合语法。
如果确实出现返回两个值的情况,检查是否误写了代码(比如使用了multiple-value-list等多值相关函数),或者文件存在特殊编码/不可见字符问题。
内容的提问来源于stack exchange,提问作者davypough
相关产品推荐
相关产品推荐

