私は誤って以下のコードを思いついた:
(format t "~{~[~:R~;~S~:;none~] chance~^, ~}" '(0 1 0 2 0 3))
しかし、なぜそれがそのように機能するのか説明できません。私が見る行動は次のようなものです:
リストの奇数要素は、条件付きにフィードするコンスの数を定義しているようです。したがって、上記の形式で、次のように出力されます。
;; first chance, second chance, third chance
また、ゼロを1に置き換えると、出力は次のようになります。
(format t "~{~[~:R~;~S~:;none~] chance~^, ~}" '(1 1 1 2 1 3))
;; 1 chance, 2 chance, 3 chance
ただし、それをフィードすると、次のようになります。
(format t "~{~[~:R~;~S~:;none~] chance~^, ~}" '(2 1 2 2 2 3))
そうすると、「チャンスなし」の3倍になりますが、実際の結果は次のとおりです。
;; none chance, 2 chance, none chance, none chance, none chance
正直なところ、私はこれを間違って書いたので、まったく別のことをするつもりでした。この振る舞いに戸惑いました。
さて、私が正しく理解していれば、~[~]
ディレクティブは渡される引数の数に依存しますが、一方で、~{~}
可変数の引数を消費する可能性があります。それで、私が見ている動作は意図されたものですか、それとも、互換性のないディレクティブをランダムにおよび/または意図的に組み合わせたときに発生する、ある種の「未定義」の動作ですか?