我可以将属性列表作为&键参数传递给函数吗?

M.P*_*oni 2 common-lisp

是否有办法以类似于此的方式将属性列表作为参数传递给函数:

(defun sum (&key x y) (+ x y))
(sum '(:x 10 :y 20))
Run Code Online (Sandbox Code Playgroud)

Rai*_*wig 9

要使用来自列表的参数调用函数,请使用APPLY:

CL-USER > (apply #'sum '(:x 10 :y 20))
30
Run Code Online (Sandbox Code Playgroud)

这也有效:

CL-USER > (apply #'sum :x '(10 :y 20))
30

CL-USER > (apply #'sum :x 10 '(:y 20))
30

CL-USER > (apply #'sum :x 10 :y '(20))
30

CL-USER > (apply #'sum :x 10 :y 20 '())
30
Run Code Online (Sandbox Code Playgroud)

请注意,该变量call-arguments-limit仍然适用.实现支持的函数调用中的参数数量通常是有限的.因此,应用具有长参数列表的函数可能不起作用.请注意,例如在ABCL中,此值仅为50(五十).