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