Clozure Common Lisp - DRIBBLE ничего не записывает в файл

Я использую Clozure Common Lisp в Windows. При использовании DRIBBLE команды и оценки некоторых простых форм с последующим закрытием DRIBBLE поток, указанный файл создан, но в него ничего не записано.

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

Это известное ограничение CCL в Windows или проблема с моей средой?

1 ответ

Решение

Если вы посмотрите на исходный код для dribble (особенно, process-dribble), вы можете видеть, что CCL перенаправляет *TERMINAL-IO* поток в двусторонний поток. Если вы попытаетесь написать прямо в этот поток (и, возможно, вызов finish-output после, чтобы быть уверенным), то файл будет записан.

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

Вариант использования для Dribble, по крайней мере, реализованный в CCL (поведение Dribble практически не определено), должен использоваться из терминала, где вы не можете легко записать свой сеанс. В среде IDE, такой как Lispbox/Slime, существуют другие механизмы для хранения команд, например, буфер, в котором хранится текущий REPL.

Другие вопросы по тегам