Common Lispは、多くの書式設定ディレクティブをサポートしています。しかし、私は自分の問題のための便利な指示を見つけることができませんでした。基本的に、私は数字のグリッドを印刷したいと思います。うまくリストに、次の作品を使用してCommon Lispでベクトルを反復処理するフォーマットディレクティブはありますか?
:
(format t "~{~A|~A|~A~%~^-----~%~}" '(1 2 3 4 5 6 7 8 9))
1|2|3
-----
4|5|6
-----
7|8|9
NIL
を私はベクトルを反復するために類似した構造を見つけることができませんでした。 CLtL2 states clearly that~{...~}
は、リストを引数として想定しています。とにかくベクトルを使用しようとしましたが、私のClispは間違った引数型について正しく叫んでいました。回避策として、私のベクトルを全能のloop
を使用してスローアウェイリストに変換します。
(let ((lst (loop for e across '#(1 2 3 4 5 6 7 8 9) collecting e)))
(format t "~{~A|~A|~A~%~^-----~%~}" lst))
1|2|3
-----
4|5|6
-----
7|8|9
NIL
これはうまくいきますが、不器用な解決策として私を襲ってしまいます。私はむしろ、format
のためにだけ一時的なリストのトンを作成したいと思います。ベクトルを直接反復する方法はありますか?
好奇心で、format
がシーケンスをサポートすべきではない理由はありますか?
いつも '(format t"〜/ func-name/"何か")で自分自身を追加することができます –