1

私はGNU CLISPを使用していて、このプログラムが原因で夢中になっています:

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

次のようなものを出力します。

my input...
<prompt RESPONSE

しかし、(read-line) の前にプロンプ​​トを出力すると、偽の空の行が表示されます。

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

例えば:

prompt> my input...

<prompt RESPONSE

read-line の前後に (finish-output) を使用してみましたが、役に立ちませんでした。その空の行がどこから来たのかわかりません。CLISP にバグがあると思われます。

4

1 に答える 1

2

知らない人のため~&に、formatコマンドには条件付き改行があります。これは、「必要に応じて改行を出力する」ことを意味します。つまり、Lisp が最後に印刷したものが改行でなかった場合にのみ、改行を印刷します。

このformat関数 (少なくともあなたのマシンでは!) は、改行を発行するかどうかを決定するときにユーザー入力を無視します。これは、すべてのシステムに当てはまるとは限りません。本当に覚えていません。

~&の直前にある に注目しましょう<prompt RESPONSE。最初のケースでformatは、まだ何も印刷されていないため、改行を印刷する必要がないことがわかります。2 番目のケースformatでは、最後に印刷したものが改行ではなかったため、改行を印刷する必要があることがわかります。

format解決策: ユーザーが常に改行を提供することを知っているので、それをステートメントに含めないでください。必要に応じて、最初のプロンプトから削除することもできます。

(format t "prompt> ")
(read-line)
(format t "<prompt RESPONSE")

~&では、「では一体何のためにあるのか」という疑問が生じます。そして、実際には、それには他の用途があります。たとえば、連続する 2 行の出力を区切るには、次のようにします。

(format t "prompt> ")
(read-line)
(format t "<prompt RESPONSE 1~&<prompt RESPONSE 2")
于 2012-03-09T06:25:40.287 に答える