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的缓冲区。
我在 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的缓冲区。