我安装了 emacs + sbcl + 史莱姆。我定义了这个函数
(defun jugar ()
(let* ((nodoActual *nodo-inicial*)
(estadoActual (nodo-estado nodoActual))
(timeStart nil)
(timeEnd nil)
)
(loop while (not (es-estado-final estadoActual)) do
(setf *hojas* 0)
(setf timeStart (get-universal-time))
(setf nodoActual (decision-minimax nodoActual *profundidad* timeStart))
(setf timeEnd (get-universal-time))
(setf estadoActual (nodo-estado nodoActual))
(imprime-en-fichero estadoActual)
(format t "Hojas analizadas: ~a ~%" *hojas*)
(format t "Tiempo empleado: ~a ~%~%" time))
))
这会进行一系列调用并在循环中打印一些变量。
问题是当我从*slime-repl sbcl*
缓冲区调用(jugar)
时,提示会等到(jugar)
执行结束,以同时显示所有(format …)
。我从终端(运行 sbcl(尝试了相同的方法,它运行良好,所以我想这与 emacs 或史莱姆有关。我该如何解决它?
Proksid的回答提到了force-output
,这是在正确的轨道上,但实际上有一些相关的可能性。 force-output
的文档还描述了finish-output
(和clear-output
,这与我们无关(:
完成输出、力输出和清晰输出练习控制 缓冲流输出的内部处理。
完成输出尝试确保任何缓冲输出发送到 输出流已到达其目标,然后返回。
强制输出会启动任何内部缓冲区的清空,但会 不要等待完成或确认返回。
清除输出尝试中止 中任何未完成的输出操作 进展,以便尽可能少的产出继续 目的地。
如果您想保证不同迭代的输出不会交错(我不知道这是否可能(,您可能需要考虑finish-output
而不是force-output
。 无论哪种情况,至少要注意这两种选择。
在最后一次(格式(调用后添加(强制输出(。