Lisp - 可选参数



你可以使用可选参数定义函数。要做到这一点,需要在可选参数的名称前加上符号 &optional

让我们编写一个函数,用于显示接收到的参数。

示例

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

main.lisp

; define a function with optional parameters
(defun show-members (a b &optional c d) (write (list a b c d)))
; call the method with an optional parameter
(show-members 1 2 3)
; terminate printing
(terpri)
; call method with all optional parameter
(show-members 'a 'b 'c 'd)
; terminate printing
(terpri)
; call method with no optional paramter
(show-members 'a 'b)
; call method with all optional parameter
(terpri)
(show-members 1 2 3 4)

输出

执行此代码后,它返回以下结果:

(1 2 3 NIL)
(A B C D)
(A B NIL NIL)
(1 2 3 4)

请注意,在上述示例中,参数 c 和 d 是可选参数。

示例 - 多个数字的和

更新名为 main.lisp 的文件,并输入以下代码。在此代码中,我们会获取传递的数字的和。

main.lisp

; define a function with optional parameter
(defun sum (a b &optional c) 
   ; check if c is not defined
   (if(not c)
      ; get sum of two numbers   
      (write (+ a b))
	  ; otherwise get sum of all numbers
      (write (+ a b c))
   ))

; terminate printing
(terpri)
; call method with no optional parameter
(sum 1 2)
; terminate printing
(terpri)
; call method with optional parameter
(sum 1 2 3)

输出

执行此代码后,它返回以下结果:

3
6

示例 - 多个数字的乘积

更新名为 main.lisp 的文件,并输入以下代码。在此代码中,我们会获取传递的数字的和。

main.lisp

; define a function with optional parameter
(defun product (a b &optional c) 
   ; check if c is not defined
   (if(not c)
      ; get product of two numbers 
      (write (* a b))
      ; otherwise get product of all numbers
      (write (* a b c))
   ))
; terminate printing
(terpri)
; call method with no optional parameter
(product 1 2)
; terminate printing
(terpri)
; call method with optional parameter
(product 1 2 3)

输出

执行此代码后,它返回以下结果:

2
6
lisp_functions.htm
广告