我是普通lisp的新手,因此我的问题可能非常简单,但我没有找到任何内容,也许我使用了错误的搜索字词。
我遇到了以下问题:
我有一个功能,可以在任意数量的参数上进行特殊添加。下一步是将该函数应用于任意数量的相同大小的列表,结果将是该大小的列表。
如果我打电话,它会工作
(mapcar #'addition list1 list2 ...)
但如果我必须定义一个功能
(defun list-add (list &rest lists)
(mapcar #'addition list lists))
它不起作用,因为& rest list现在是一个列表列表。需要使用所有参数作为序列调用函数添加,因此无法进行递归调用。
有没有人有解决方案?
答案 0 :(得分:5)
请参阅APPLY。
另请注意CALL-ARGUMENTS-LIMIT的价值。
显而易见的解决方案是:
(defun list-add (&rest lists)
(apply #'mapcar #'addition lists))
答案 1 :(得分:0)
我不确定我是否正确地提出了问题但是尝试
(defun list-add (list &rest lists)
(mapcar (lambda (l) (apply #'addition list l))
lists))
答案 2 :(得分:0)
我不确定这是否比已经提供的答案更好或更差,但这是我想出的:
(defun list-add (first-required-list &rest other-lists)
(let ((all-lists (cons first-required-list
other-lists)))
(reduce (lambda (left-list right-list)
(mapcar #'addition left-list right-list))
all-lists)))