Clozure Common Lisp - DRIBBLE 不向文件写入任何内容

Clozure Common Lisp - DRIBBLE doesn't write anything to file

我在 Windows 上使用 Clozure Common Lisp。当使用 DRIBBLE 命令并评估一些简单的形式后关闭 DRIBBLE 流时,会创建一个指定的文件,但不会向其中写入任何内容。

(DRIBBLE "test.log")
(+ 2 2)
(LIST 'a 'b 'c)
(DRIBBLE)

这是 CCL 对 Windows 的已知限制还是我的环境有问题?

如果您查看 dribble(特别是 process-dribble)的源代码,您可以看到 CCL 将 *TERMINAL-IO* 流重定向到双向流。如果您尝试直接写入该流(当然可能会在之后调用 finish-output),那么文件将被写入。

> (dribble "/tmp/log")
> (print "test" *terminal-io*)
> (dribble)

dribble 的用例,至少在 CCL 中实现(dribbble 的行为实际上是未指定的),是从终端使用的,在那里你不能轻易地记录你的会话。在像Lispbox/Slime这样的IDE下,还有其他机制来存储命令,例如保存当前REPL的缓冲区。