有没有一种方法可以像这样将属性列表作为参数传递给函数:
(defun sum (&key x y) (+ x y))
(sum '(:x 10 :y 20))
最佳答案
要使用来自列表的参数调用函数,请使用 APPLY :
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
CL-USER > (apply #'sum :x 10 :y 20 '())
30
请注意,变量 call-arguments-limit
仍然适用。实现支持的函数调用中的参数数量通常是有限的。因此,应用具有一长串参数的函数可能行不通。请注意,例如在 ABCL 中,此值仅为 50(五十)。
关于common-lisp - 我可以将属性列表作为 &key 参数传递给函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44894604/