我是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