我想添加两个列表:(1 2 3)和(5 3 4)应该产生(6 5 7)。
函数应该在相应的位置上添加元素,所以即使我有(911)+(5 2 6),它也会产生(14 3 8)。
我的职能
(defun add(l r)
(setf return-value '())
(loop for i from 0 to (- (length l) 1)
do (setf return-value (cons (+(nth i l)(nth i r)) return-value))
)
(reverse return-value)
)我如何才能创建一个能够减去列表的simmilar函数?
发布于 2014-05-27 00:28:00
如果允许您使用标准函数,那么mapcar是您的朋友:
(mapcar #'+ '(1 2 3) (9 7 5))
==> (10 9 8)同样适用于-。
您的函数存在二次性能问题--您不应该使用nth。您还应该将return-value与let绑定。您还应该使用reverse,因为您正在构建一个新的列表。
编写函数的更习惯的方法是
(defun addl (l r)
(loop for x in l and y in r collect (+ x y)))https://stackoverflow.com/questions/23878202
复制相似问题