format:条件分岐:文字列セットのn番目を選択する - lisp-cookbook-ja/common-lisp GitHub Wiki
~~[ ~]で囲んだ文字列は、先頭を0番目として、引数に与えられた数値に応じて指された文字列を選択することが可能です。
セパレータは、~;になります。
(dotimes (i 5)
(format t "~[foo~;bar~;baz~]~%" (random 3)))
;-> foo
; baz
; foo
; bar
; foo
;
;=> NIL
上記は動作としては、
(dotimes (i 5)
(format t "~A~%" (nth (random 3) '("foo" "bar" "baz"))))
と同じように考えられます。
馬鹿馬鹿しい例
(dotimes (i 100)
(format t
"~[~;1~;2~;Fizz~;4~;Buzz~;Fizz~;7~;8~;Fizz~;Buzz~;11~;Fizz~;13~;14~;FizzBuzz~;16~;17~;Fizz~;19~;Buzz~;Fizz~;22~;23~;Fizz~;Buzz~;26~;Fizz~;28~;29~;FizzBuzz~;31~;32~;Fizz~;34~;Buzz~;Fizz~;37~;38~;Fizz~;Buzz~;41~;Fizz~;43~;44~;FizzBuzz~;46~;47~;Fizz~;49~;Buzz~;Fizz~;52~;53~;Fizz~;Buzz~;56~;Fizz~;58~;59~;FizzBuzz~;61~;62~;Fizz~;64~;Buzz~;Fizz~;67~;68~;Fizz~;Buzz~;71~;Fizz~;73~;74~;FizzBuzz~;76~;77~;Fizz~;79~;Buzz~;Fizz~;82~;83~;Fizz~;Buzz~;86~;Fizz~;88~;89~;FizzBuzz~;91~;92~;Fizz~;94~;Buzz~;Fizz~;97~;98~;Fizz~;Buzz~]~%" i))
;->
; 1
; 2
; Fizz
; 4
; Buzz
; Fizz
; 7
; 8
; Fizz
; Buzz
; 11
; Fizz
; 13
; 14
; FizzBuzz
; 16
; 17
; Fizz
; 19
; Buzz
; Fizz
; 22
; 23
; Fizz
; Buzz
; 26
; Fizz
; 28
; 29
; FizzBuzz
; 31
; 32
; Fizz
; 34
; Buzz
; Fizz
; 37
; 38
; Fizz
; Buzz
; 41
; Fizz
; 43
; 44
; FizzBuzz
; 46
; 47
; Fizz
; 49
; Buzz
; Fizz
; 52
; 53
; Fizz
; Buzz
; 56
; Fizz
; 58
; 59
; FizzBuzz
; 61
; 62
; Fizz
; 64
; Buzz
; Fizz
; 67
; 68
; Fizz
; Buzz
; 71
; Fizz
; 73
; 74
; FizzBuzz
; 76
; 77
; Fizz
; 79
; Buzz
; Fizz
; 82
; 83
; Fizz
; Buzz
; 86
; Fizz
; 88
; 89
; FizzBuzz
; 91
; 92
; Fizz
; 94
; Buzz
; Fizz
; 97
; 98
; Fizz
;
;=> NIL