我是LISP的初學者。我遇到了以下錯誤** - IF:變量SUM-REC沒有值,但不知道如何解決它。這是我的代碼。使用遞歸計算的總和LISP
(defun sum-rec (n)
(if (not (eq n 0))
(+ (sum-rec(-n 1))n)
0
)
(format t "ans = ~a~%" (sum-rec 4))
我是LISP的初學者。我遇到了以下錯誤** - IF:變量SUM-REC沒有值,但不知道如何解決它。這是我的代碼。使用遞歸計算的總和LISP
(defun sum-rec (n)
(if (not (eq n 0))
(+ (sum-rec(-n 1))n)
0
)
(format t "ans = ~a~%" (sum-rec 4))
不要使用eq
比較數字,因爲eq
比較對象並沒有保證,這將爲數字按預期工作。改爲使用eql
,=
,或在此情況下使用/=
。
功能調用表示爲(func p1 p2 ...)
,而不是func(p1 p2 ...)
。
所以正確的代碼是
(defun sum-rec (n)
(if (/= n 0)
(+ (sum-rec (- n 1)) n)
0))
測試:
CL-USER> (format t "ans = ~a~%" (sum-rec 4))
ans = 10
NIL
CL-USER> (+ 1 2 3 4)
10
(sum-rec (-n 1))
有一個空間缺少-
和n
之間。 Lisp將其作爲函數-n
應用於1
來讀取,這顯然不是那裏的意思。修復這些一切之後的工作原理:
(defun sum-rec (n)
(if (not (eq n 0))
(+ (sum-rec(- n 1)) n)
0))
> (format t "ans = ~A~%" (sum-rec 4))
ans = 10
哦!謝謝。我可以問爲什麼? – Hero1134
對不起,我不明白你的問題...爲什麼*什麼*? – uselpa
爲什麼「/ =」有效。 – Hero1134