0

我安装了 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 或粘液有关。我该如何解决?

4

2 回答 2

7

proksid 的回答提到force-output,这是在正确的轨道上,但实际上有一些相关的可能性。的文档force-output还描述了finish-output(和clear-output,这与我们无关):

finish-outputforce-outputclear-output对缓冲流输出的内部处理进行控制。

finish-output尝试确保发送到 output-stream 的任何缓冲输出都已到达其目的地,然后返回。

force-output启动任何内部缓冲区的清空,但不等待完成或确认返回。

clear-output尝试中止正在进行的任何未完成的输出操作,以允许尽可能少的输出继续到目的地。

如果您想保证不同迭代的输出不会交错(我不知道这是否可能),您可能需要考虑finish-output而不是force-output. 无论哪种情况,至少要注意这两种选择。

于 2013-10-07T14:34:37.147 回答
3

在最后一次 (format ) 调用之后添加 (force-output)。

于 2013-10-07T09:02:50.283 回答