假设我有这段代码:
(handler-case (read ...)
(parse-error (condition)
(format t "What text was I reading last to get this error? ~s~&"
(how-to-get-this-text? condition))))
我只能看到parse-namestring
个访问者,但它会给出错误消息,而不是它正在解析的文本。
修改
在我的情况下,问题不那么通用,所以不涉及整个字符串的替代解决方案也无法解析。
想象一下我试图解析的这个示例代码:
prefix(perhaps (nested (symbolic)) expressions))suffix
在某些情况下,我需要停在“后缀”上,而在其他情况下,我需要继续,后缀本身没有其他含义,只是作为解析器接下来应采取的操作的指示。
答案 0 :(得分:4)
READ从流中解析,而不是字符串。 s表达式可以任意长。 READ应该保留一串已读的内容吗?
您可能需要的是一个特殊的流。在标准Common Lisp中,没有用户定义流的机制。但在现实生活中,每个实现都有这样的可扩展流。例如,参见'grey streams'。
答案 1 :(得分:3)
没有标准功能。您可以使用read-from-string
来强制执行某些操作,但无论您做什么,都需要一些额外的工作。