Rest Parameters(剩余形参)

    可选形参仅适用于一些较为分散并且不能确定调用者是否会供值的形参。但某些函数需要接收可变数量的实参,比如说前文已然出现过的一些内置函数。FORMAT 有两个必要实参,即流和控制串。但在这两个之后,它还需要一组可变数量的实参,这取决于控制串需要插入多少个值。+ 函数也接受可变数量的实参——没有特别的理由限制它只能在两个数之间相加,它对任意数量的值做加法运算(它甚至可以没有实参,此时返回 0——加法的底数)。下面这些都是这两个函数的合法调用:

    很明显,也可以通过简单地给它一些可选形参来写出接受可变数量实参的函数,但这样将会非常麻烦——光是写形参列表就已经足够麻烦了,何况还要在函数体中处理所有这些形参。为了做好这件事,还将不得不使用一个合法的函数调用所能够传递的那么多的可选形参。这一具体数量与具体实现相关,但可以保证至少有 50 个。在当前所有实现中,它的最大值范围从 4096 到 536,870,911。这种绞尽脑汁的无聊事情绝对不是 Lisp 风格。

    相反,Lisp 允许在符号 &rest 之后包括一揽子形参。如果函数带有 &rest 形参,那么任何满足了必要和可选形参之后的其余所有实参就将被收集到一个列表里成为该 形参的值。这样,FORMAT+ 的形参列表可能看起来会是这样: