我安装了emacs + sbcl + slime。我已经定义了这个函数
(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))
))
进行一系列调用并在循环中打印一些变量。
问题是当我从(jugar)
缓冲区调用*slime-repl sbcl*
时,提示会等到(jugar)
执行结束,以便同时显示所有(format …)
。我从一个终端(运行sbcl)尝试了同样的方法并且运行良好,所以我猜这是与emacs或slime相关的东西。我该如何解决?
答案 0 :(得分:7)
proksid's answer提及force-output
,这是正确的轨道,但实际上有一些相关的可能性。 documentation for force-output
还描述了finish-output
(以及clear-output
,这与我们无关):
完成输出,强制输出和清除输出控制权 缓冲流输出的内部处理。
finish-output 会尝试确保发送的所有缓冲输出 output-stream已到达目的地,然后返回。
强制输出启动任何内部缓冲区的清空,但确实如此 不等待完成或确认返回。
clear-output 尝试中止任何未完成的输出操作 进展,以尽可能少的产出继续 目的地。
如果您想保证不同迭代的输出不会交错(我不知道这是否可能),您可能需要考虑finish-output
而不是force-output
。在任何一种情况下,至少要注意两种选择。
答案 1 :(得分:3)
在最后一次(格式)调用后添加(强制输出)。