1

我在使用 clisp 时遇到问题。我试图获取列表中数字的总和,但它给了我这个错误:

 EVAL-the function L is undefined

当我打电话时

(sum '(2 (c 6)))

这是代码:

(defun sum(l)
        (cond
           ((null l) 0)
           ((NUMBERP (car l)) (+ (car l) (sum(cdr l)) ))
            (t (sum(cdr(l))))
        )
)  
4

2 回答 2

1

(cdr(l))调用函数l并应用于cdr它返回的值。

你应该改写(cdr l)

(t (sum (cdr l))))
于 2012-12-05T21:16:19.413 回答
1
(defun sum (x) (if (null x) 0 
                    (if (numberp x) x 
                         (+ (car x) (sum (cdr x))))))

顺便说一句,你可以对产品做类似的事情

(defun prod (x) (if (null x) 1 
                    (if (numberp x) x 
                         (* (car x) (prod (cdr x))))))

(eq (prod '(1 2 3 4 5 6 7 8 9 10)) (fact 10))

但首先定义事实 - 在这里你是事实的定义(通常的......)

(defun fact (n)
     (if (not (integerp n)) (print "give me an integer" )          
        (if (< n 0) (print "give me a pos num " )          
         (if (= n 0) 1    
             (if (= n 1) 1 
                 (* n (fact (- n 1)
)))))))
于 2013-01-16T23:15:01.867 回答