Memoize |
BasicWerk
EC Support
Technique
Facebook
|
20140925091845_Common_Lisp_format_numbering |
Common_Lisp_format_numbering
FORMAT 関数で、引数を番号で呼び出す。先頭 0 番。 ;; 0:a, 1:b, 2:c * (format t "~A ~A ~A ~1@*~A ~2@*~A" 'a 'b 'c) A B C B C
~n* (GO-TO) というフォーマット指定子は「何も出力せずに」引数を n 個消費する。 例えば以下はいずれも "C" のみを出力する。 * (format t "~*~*~A" 'a 'b 'c) C * (format t "~2*~A" 'a 'b 'c) C
: 修飾子を付けると引数を消費した位置から n 個分戻る。 A, B, C と順当に先頭から 3 つの引数を消費し、そこから 1 ステップ戻って C をもう一度印字する。 * (format t "~A ~A ~A ~1:*~A" 'a 'b 'c) A B C C ;; 1 は省略できる * (format t "~A ~A ~A ~:*~A" 'a 'b 'c) A B C C ;; 3 ステップ戻ると先頭の A を印字 * (format t "~A ~A ~A ~3:*~A" 'a 'b 'c) A B C A
: 修飾子はプレイバックのような感じなので引数のカーソルが今どこにいるかで動作が決まる。 つまり相対的だ。
これに対して @ 修飾子は引数の先頭を 0 番としてどの引数を呼び出すか絶対的な指定ができる。 ;; 0:a, 1:b, 2:c * (format t "~1@*~A ~0@*~A ~2@*~A" 'a 'b 'c) B A C ;; n を省略すると 0 番 * (format t "~A ~A ~A ~@*~A" 'a 'b 'c) A B C A
http://super.para.media.kyoto-u.ac.jp/~tasuku/format-func.html
|
© Shin Nakamura/BasicWerk 2014 |