Lisp - 参数剩余



某些函数需要接受可变数量的参数。

例如,我们正在使用的 **format** 函数需要两个必填参数,即流和控制字符串。但是,在字符串之后,它需要可变数量的参数,具体取决于要在字符串中显示的值的数量。

类似地,+ 函数或 * 函数也可能接受可变数量的参数。

可以使用符号 **&rest** 来提供对这种可变数量的参数的支持。

以下示例说明了这个概念:

示例

创建一个名为 main.lisp 的新源代码文件,并在其中键入以下代码。

更新 main.lisp 文件,并在其中键入以下代码。

main.lisp

; define a function to print arguments
(defun show-members (a b &rest values) (write (list a b values)))
; call the show-members function with three parameters
(show-members 1 2 3)
; terminate printing
(terpri)
; call the show-members function with four parameters
(show-members 1 2 3 4)
; terminate printing
(terpri)
; call the show-members function with nine parameters
(show-members 1 2 3 4 5 6 7 8 9)

输出

执行代码时,将返回以下结果:

(1 2 (3))
(1 2 (3 4))
(1 2 (3 4 5 6 7 8 9))

示例

更新名为 main.lisp 的源代码文件,并在其中键入以下代码。

更新 main.lisp 文件,并在其中键入以下代码。

main.lisp

; define a function to print arguments
(defun show-members (a b &rest values) (write (list a b values)))
; call the show-members function with four parameters
(show-members 'a 'b 'c 'd)
; terminate printing
(terpri)
; call the show-members function with two parameters
(show-members 'a 'b)

执行代码时,将返回以下结果:

(A B (C D))
(A B NIL)

示例

更新名为 main.lisp 的源代码文件,并在其中键入以下代码。

更新 main.lisp 文件,并在其中键入以下代码。

main.lisp

; define a function to print arguments
(defun show-members (a b &rest values) (write (list a b values)))
; call the show-members function with three parameters
(show-members 1.0 2.0 3.0)
; terminate printing
(terpri)
; call the show-members function with four parameters
(show-members 1.0 2.0 3.0 4.0)
; terminate printing
(terpri)
; call the show-members function with nine parameters
(show-members 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0)

执行代码时,将返回以下结果:

(1.0 2.0 (3.0))
(1.0 2.0 (3.0 4.0))
(1.0 2.0 (3.0 4.0 5.0 6.0 7.0 8.0 9.0))
lisp_functions.htm
广告