Common lisp 读取带有提示的行后的换行状态似乎不会更新

Common lisp 读取带有提示的行后的换行状态似乎不会更新,common-lisp,newline,clisp,Common Lisp,Newline,Clisp,我正在使用GNU CLISP并变得疯狂,因为这个程序: (read-line) (format t "~&<prompt RESPONSE") (读取行) (格式t“~&”) (读行) (format t“~&对于那些不知道的人,format命令中的~&是一个条件换行符,意思是“如果需要打印一个换行符”。也就是说,仅当lisp打印的最后一个东西不是换行符时才打印一个换行符 format函数(至少在您的机器上!)在决定是否发布换行时忽略用户输入。并非所有系统都是如此。我真的不记得了

我正在使用GNU CLISP并变得疯狂,因为这个程序:

(read-line)
(format t "~&<prompt RESPONSE")
(读取行)
(格式t“~&”)
(读行)

(format t“~&对于那些不知道的人,
format
命令中的
~&
是一个条件换行符,意思是“如果需要打印一个换行符”。也就是说,仅当lisp打印的最后一个东西不是换行符时才打印一个换行符

format
函数(至少在您的机器上!)在决定是否发布换行时忽略用户输入。并非所有系统都是如此。我真的不记得了


让我们关注一下紧跟在
之前的
~&
,我无法在LinuxMint(Debian衍生工具)下重现这个问题。你在Windows下使用CLISP吗?谢谢你问这个问题!我一直想打一个类似的问题…特别是问是否有办法让条件换行符知道用户输入,因为其他场景也会让这不是你想要的…@lindes我可以想象一个场景,你事先不知道美国er的输入以换行结束,即在您一次接受一次击键的情况下。REPL不是这样工作的。它一次接受一行用户输入,总是以换行结束。旁注:如果您一次输入多个表达式(即,在一行上输入所有表达式)在REPL中,输出会混淆,所以我建议不要这样做。好吧,在REPL的情况下,如果输入总是以换行符结束,那么在我看来,输出状态应该通过输入来更新……除非,比如说,您在伪终端上关闭了“echo”(比如,输入密码或其他)…不?我解释得很好吗?留给我的问题是,这是否可以让我意识到输入内容。可以吗?如果可以,怎么做?你想对输入做什么?将其存储在变量中?@lindes我刚刚阅读了你的另一条评论,它回答了我之前的评论。嗨,很抱歉,我的回答太晚了。我的问题实际上是(格式t)~&@AntonioBonifati很抱歉Lisp不太适应。不幸的是,同样的事情也发生在(至少在某些情况下)其他的LISP也是如此。我怀疑CLSP开发人员或任何其他LISP开发人员都会认为这是他们的错误。他们会告诉你重新组织你的代码,这样它就不会发生。这样的处理可能意味着把<代码> ~和<代码>移到其他<代码>格式字符串。
my input...
<prompt RESPONSE
(format t "~&prompt> ")
(read-line)
(format t "~&<prompt RESPONSE")
prompt> my input...

<prompt RESPONSE
(format t "prompt> ")
(read-line)
(format t "<prompt RESPONSE")
(format t "prompt> ")
(read-line)
(format t "<prompt RESPONSE 1~&<prompt RESPONSE 2")