这有效:
(+ 1 2 3)
6
这不起作用:
(+ '(1 2 3))
如果加载了“cl-*
”,则此方法有效:
(reduce '+ '(1 2 3))
6
如果reduce
始终可用,我可以写:
(defun sum (L)
(reduce '+ L))
(sum '(1 2 3))
6
定义sum
等功能的最佳做法是什么?
答案 0 :(得分:64)
(apply '+ '(1 2 3))
答案 1 :(得分:3)
答案 2 :(得分:2)
线性递归函数(和L)
;;
;; sum
;;
(defun sum(list)
(if (null list)
0
(+
(first list)
(sum (rest list))
)
)
)
答案 3 :(得分:0)
您可以定义自定义函数来计算传递给它的列表的总和。
(defun sum (lst) (format t "The sum is ~s~%" (write-to-string (apply '+ lst)))
EVAL: (sum '(1 4 6 4))
-> The sum is "15"
答案 4 :(得分:-1)
这应该是诀窍:
(defun sum-list (list)
(if list
(+ (car list) (sum-list (cdr list)))
0))
编辑:Here is another good link解释car
和cdr
- 基本上它们是允许您抓取列表的第一个元素并检索第一个项目的新列表的函数。< / p>
答案 5 :(得分:-1)
汽车 - &gt;获取列表的第一个元素
cdr - &gt;获取列表中除第一个元素
之外的所有元素(defun sumup(x)(if(等于x nil)0(+(car x)(sumup(cdr x)))))
(总和'(5 7 8 10))
30
答案 6 :(得分:-2)
(eval (cons '+ '(1 2 3)))
- 虽然不如'reduce'
答案 7 :(得分:-2)
(插入(数字到字符串(应用'+'(1 2 3))))