common-lisp - 我可以将属性列表作为 &key 参数传递给函数吗?

标签 common-lisp

有没有一种方法可以像这样将属性列表作为参数传递给函数:

(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/

相关文章:

lisp - Mapcar 和 assoc

lisp - lisp项目的结构

list - 返回普通lisp中没有最后一个元素的列表

debugging - 如何使用 gcl 在 Common Lisp 中进行跟踪?

common-lisp - 如何自定义SBCL REPL?

lisp - 为什么 null 谓词称为 null,而不是 nullp?

common-lisp - 如何使用外键也用作键来实现 View 类

lisp - GNU CLISP 中的 if 条件

common-lisp - 为什么许多Common Lisp系统都使用单个package.lisp文件?

lambda - 在 Common Lisp 中定义和使用变量中的函数