[SBCL]我想从一个文本文件看起来像这样读取字符逐个字符:Lisp的 - 在DO FORM类型错误时从文件读取
:table
E E E E E
E C C C E
E E E E E
我的代码(有些省略清晰度):
(defun read-txt (path)
(with-open-file str path :direction :input
:if-exists :supersede)
(let ((a nil)
(form read-line str))
(case form
(otherwise (do* ((char (read-char str nil) (read-char str nil))
(count 0 (if (char= char #\Newline) (1+ count) count)))
((null char) a)))))))
给我一个错误,沿着“价值NIL是不是类型字符”。即使在将调试设置为3之后,回溯也没有用处。它告诉我的是,我称之为read-txt,它的参数是一个文件路径。
当我打印文件中的每个字符时,它们都不是NIL。如果我在do的主体中使用char =,我不会收到错误。代码编译时没有错误或警告。
请复制并粘贴所有代码和错误消息。你当前的代码会产生一个不同的错误:'form'的'let'子句被破坏。 – sds
你真的不应该通过手动缩进。编辑应该这样做或Lisp本身。这里的缩进是错误的。 WITH-OPEN-FILE之后的部分参数需要放在括号内。你的代码只有一个右括号,开放的括号是错误的。调整你的代码并重新加载代码 - 但是手动使用工具。缩进非常重要,没有工具就无法可靠地完成缩进。 –
对不起,我不确定如何从emacs的剪贴板粘贴到Firefox。 – plishplop