我如何以编程方式写到*标准输入*,以便在 repl 中进行评估?

问题描述 投票:0回答:1

我在 repl (clozure common lisp) 中键入了以下内容。

(defparameter test 1)

复员的答复是 test

现在我进入。

(format *standard-input* "(defparameter test 2)")

Repl输出 (defparameter test 2) 其次 nil.

但测试的值仍然是1不变。

为什么会这样?是不是向变量 *standard-input* 和在复制处输入文字一样吗?

怎样才能达到理想的评价?


一些背景。

我正在为使用套接字的通用lisp开发做一个自定义前端。我需要写到标准输入,因为即使我可以使用eval和read来评估代码,但我不能在错误时调试代码。

例如,如果不写到标准输入,输入1解除堆栈并返回顶层是不可能的(据我所知)。我已经想好了输出部分。

common-lisp read-eval-print-loop
1个回答
2
投票

*standard-input* 是一个 输入 流,顾名思义。 它是一个你读取的流,而不是你写入的流。 它可能也是一个输出流,但如果是的话,那么写到它就不会向 REPL 中注入字符串。

我建议看一下 瘦身SLY 如果你想了解如何有REPLs &调试器,它与事物的下流交互。 特别是 SWANK 可能是最有意思的一点,或者说是SLY的等价物,也就是SLYNK(或者说是slynk,不知道大写)。 这些协议在各种Lisps中的实现并不完全是小事,但 早已存在:你不需要写它们。 刮屏一个为人类而生的界面几乎总是一个可怕的方法:只有在没有更好的方法时才是合理的,在这种情况下,有一个更好的方法,事实上至少有两个。

© www.soinside.com 2019 - 2024. All rights reserved.