6

我还在学习 lisp,所以,当我遇到这个问题时,我感到很困惑。我有一个简单的功能,我想先打印然后读取输入:

(defun ask()
   (princ '?)
   (read))

所以,当我用 CLISP 运行它时,它显示了预期的结果,它打印了?,然后,在同一行,我可以将输入写入 read 函数。

当我用 SBCL 运行它时,它出错了。首先询问我的输入,然后打印 ?。我想这可能是因为我没有制作换行符,但我真的很想知道如何在 SBCL 的同一行中进行这项工作。另外,我想知道为什么 CLISP 中的结果是正确的,而 SBCL 中的结果却不是。提前谢谢你的帮助。

4

2 回答 2

14

它对我来说按正确的顺序工作,但也许你的情况可以与输出缓冲有关,由 SBCL 执行。您可以添加(finish-output)afterprinc以保证打印将完成,read调用 before 。

于 2011-12-02T18:23:56.820 回答
-1

对于那些偶然发现这一点的人,我发现从 emacs shell 内部运行 sbcl 时,打印/读取语句似乎更经常出现故障。但是,如果我从 gnome 终端中运行我的代码,它似乎大多数时候都能正确输出。

显示基于 emacs 与 gnome 终端在不同时间输出的打印语句的图像

于 2022-01-08T23:27:54.447 回答