📜  LISP 中的关键字参数

📅  最后修改于: 2022-05-13 01:55:37.301000             🧑  作者: Mango

LISP 中的关键字参数

LISP函数的参数列表的基本目的是声明将接收在函数中传递的参数的变量。通常参数列表包含变量名称的基本列表,这些参数称为“必需参数”。如果一个函数被调用,对于每个必需的参数,它应该被提供一个单独的参数,如果它被更多或更少的参数调用,LISP 将显示一个错误。

参数列表中的参数类型

  • 必需参数
  • 可选参数
  • 休息参数
  • 关键字参数

关键字参数:

当我们想要将特定值传递给特定参数时,使用关键字参数。考虑一个有 3 个可选参数的场景,如果用户只想传递第二个可选参数的值怎么办,这里第一个参数即使是可选的,他也必须传递其值,使其成为必需参数,以解决这个问题关键字参数用于调用者可以选择指定哪个值将被指定给哪个特定参数。

定义关键字参数的语法:

要在函数中定义关键字参数,请在任何应该设置为关键字参数的参数之前添加符号&key
为了说明这一点,请看下面的代码:

(defun keyword_example (&key x y z)...)

这里 xyz 是关键字参数说明符。

例子:

现在让我们创建一个只有关键字参数的函数,并将它们的默认值设置为一些预定义的值。

(defun keyword_example (&key (x 5) (y 7) (z (+ x y)))...)

在这个名为“ keyword_example ”的函数中,我们有 3 个关键字参数,
除此之外,我们为所有这些参数设置了默认值,例如x -> 5, y -> 7,对于z ,我们给它 x 和 y之和的值

现在,为了说明的目的,在这个函数的主体中,我们将创建一个包含我们的参数的列表

(list x y z)

让我们通过对每个参数进行不同值的各种调用来调用此函数

代码 :

Lisp
(defun keyword_example (&key (x 5) (y 7) (z (+ x y)))
  (list x y z))
  
(write(keyword_example 😡 1))      
(terpri)    
(write(keyword_example :y 1) )         
(terpri)    
(write(keyword_example :y 1 :z 4) )    
(terpri)    
(write(keyword_example :y 1 :z 4 😡 2 ))


输出:

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

在这里,在第一次调用时,我们只是通过用😡符号指定 x 的值来传递 x 的值,对于后面的函数调用,我们专门为不同的参数设置值,也不需要按特定顺序传递参数,因为我们正在使用关键字说明符(参见第 4 个函数调用),因此使用关键字参数,我们能够给一个特定的参数,它是一个特定的值。