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