1

いくつかの format および princ 呼び出しの動作は次のとおりです。

(format nil "a")
"a"
CL-USER> 
(format t "a")
a
NIL
CL-USER> 
(princ "a" nil)
a
"a"
CL-USER> 
(princ "a" t)
a
"a"
CL-USER> 

(princ "a" nil)呼び出しは「a」を返し、「a」を stdout に出力せず、「a」を stdout に出力すると思っていました。また、最初と 2 番目の princ 呼び出しに違いがない理由もわかりません。

hyperspec を閲覧してみましたが、必要な情報が見つかりません。

私の誤解は、niltがストリームではないためだと思いますが、フォーマットはそれらを戻りストリーム (それが何であれ) と stdout に変換します。その場合、どうすれば(format nil ...)効果を得ることができますか(princ ... ?)

4

2 に答える 2

1
CL-USER 25 > (with-output-to-string (stream)
               (princ "a" stream))
"a"
于 2013-05-23T05:35:21.023 に答える