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
(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 に答える
1

(cdr(l))関数を呼び出し、それが返す値にl適用します。cdr

(cdr l)代わりに次のように書く必要があります。

(t (sum (cdr l))))
于 2012-12-05T21:16:19.413 に答える