我不小心想出了下面的代码:
(format t "~{~[~:R~;~S~:;none~] chance~^, ~}" '(0 1 0 2 0 3))
但我无法解释为什么它会以这种方式工作。我看到的行为是这样的:
列表的奇数元素似乎定义了提供给条件的 conses 的数量。因此,以上面的形式,它将打印:
;; first chance, second chance, third chance
如果用 1 替换 0,则输出为:
(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
老实说,我写错了,我打算完全做其他事情。只是对这种行为感到困惑。
现在,如果我理解正确,~[~]
指令取决于传递的参数数量,另一方面~{~}
可能会消耗可变数量的参数。那么,我看到的行为是有意的,还是只是当您随机和/或故意将不兼容的指令放在一起时发生的某种“未定义”行为?