gos*_*sku 0 emacs sbcl flush common-lisp slime
我安装了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))
))
Run Code Online (Sandbox Code Playgroud)
进行一系列调用并在循环中打印一些变量.
问题是当我(jugar)从*slime-repl sbcl*缓冲区调用时,提示等待直到(jugar)执行结束以显示所有(format …)在一起.我从一个终端(运行sbcl)尝试了同样的方法并且运行良好,所以我猜这是与emacs或slime相关的东西.我该如何解决?
proksid的答案提到force-output,这是正确的轨道,但实际上有一些相关的可能性.该文档force-output还描述了finish-output(以及clear-output与我们无关的文档):
完成输出,强制输出和清除输出运动控制缓冲流输出的内部处理.
finish-output尝试确保发送到output-stream的任何缓冲输出已到达其目标,然后返回.
force-output启动任何内部缓冲区的清空,但不等待完成或确认返回.
clear-output尝试中止正在进行的任何未完成的输出操作,以便允许尽可能少的输出继续到目的地.
如果您想保证不同迭代的输出不会交错(我不知道这是否可能),您可能需要考虑finish-output而不是force-output.在任何一种情况下,至少要注意两种选择.