【发布时间】:2020-08-19 00:53:48
【问题描述】:
我在 repl (clozure common lisp) 中输入以下内容
(defparameter test 1)
repl 回复 test
现在我输入:
(format *standard-input* "(defparameter test 2)")
Repl 输出 (defparameter test 2) 后跟 nil。
但 test 的值保持不变,为 1。
这是为什么呢?写变量*standard-input*和repl输入文本不一样吗?
我如何达到预期的评价?
一些上下文:
我正在为使用套接字的通用 lisp 开发制作自定义前端。我需要写入标准输入,因为即使我可以使用 eval 和 read 评估代码,我也无法调试错误代码。
例如,如果不写入标准输入(据我所知),输入 1 来展开堆栈并返回顶层是不可能的。我已经弄清楚了输出部分。
【问题讨论】:
-
"entering 1..." 您不想以编程方式捕获和处理错误吗?
-
并非如此,这可以通过 handler-bind 等轻松完成。我正在开发的前端是基于浏览器的,它通过 websockets 与终端中正在运行的 repl 进行通信。要评估的代码通过 websocket 连接发送,由 repl 读取和评估,结果通过同一连接发送回。这一切都很好。除非出现错误。现在我想将 debug-io 输出发送到浏览器,它可以工作,但是当我发送说“1”或其他预期输入时,我无法再评估它,你看到了吗?如果我这样做了,它仍然只是一个 1,它不会被处理。
标签: common-lisp read-eval-print-loop