gpt4 book ai didi

lisp - common lisp calling read-line after format 在 Clozure CL 实现中产生一个额外的换行符

转载 作者:太空宇宙 更新时间:2023-11-03 18:46:15 28 4
gpt4 key购买 nike

我正在阅读 Practical Common Lisp 这本书,其中有一段代码,我正在使用 Clozure CL 实现:

(defun prompt-read (prompt)
(format *query-io* "~a:" prompt)
(force-output *query-io*)
(read-line *query-io*))

在我成功定义函数后,我通过调用它

(prompt-read "Hello")

然后输入“hello”并按下回车键,输出如下:

CL-USER> (prompt-read "Hello")
Hello:hello

"hello"
NIL

添加了一个额外的空行,我试了下面的代码,没有额外的换行符:

(defun test-read ()
(read-line *query-io*))

然后执行它,结果是这样的:

CL-USER> (test-read)
hello
"hello"
NIL

这次没有产生额外的空行,实际上我发现每次read-line跟随一个格式化函数时,都会产生一个空行。我试过 Clisp 实现中的代码,两种情况都没有产生空行,我只想知道为什么会出现空行,另一个问题是 read-line 是否返回两个值?因为我每次输入的字符串后面都看到一个NIL,这个NIL是什么意思?

感谢您的帮助!

最佳答案

这是 Clozure CL 与 SLIME 读取-评估-打印-循环 (REPL) 的交互。 native Clozure CL REPL 不会这样做。

; SLIME 2014-05-16
CL-USER> (defun prompt-read (prompt)
(format *query-io* "~a:" prompt)
(force-output *query-io*)
(read-line *query-io*))
PROMPT-READ
CL-USER> (prompt-read "Hello")
Hello:hello

"hello"
NIL

如果您多次调用它,您会发现您的代码没有添加换行符,但 REPL 在某些输出完成后会在输出和返回值之间打印一行。

CL-USER> (progn (prompt-read "Hello")
(prompt-read "Hello")
(prompt-read "Hello"))
Hello:hello
Hello:hello
Hello:hello

"hello"
NIL

每个 Lisp 实现都有一些用于 SLIME 后端的特殊代码。也许有区别。

关于lisp - common lisp calling read-line after format 在 Clozure CL 实现中产生一个额外的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25656148/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com