使用递归 LISP 计算总和
Calculated Sum using Recursion LISP
我是 LISP 的初学者。我遇到了以下错误 ** - IF: variable SUM-REC has no value 但不知道如何解决它。这是我的代码。
(defun sum-rec (n)
(if (not (eq n 0))
(+ (sum-rec(-n 1) )n )
0
)
(format t "ans = ~a~%" (sum-rec 4))
不要使用 eq
比较数字,因为 eq
比较 objects 并且不能保证这对数字有效。使用 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
- 检查括号:它们是不平衡的。
- 请正确格式化代码:它有助于阅读它并找到错误。
- 在 Lisp 中,白色space 很重要:它分隔项目。在
(sum-rec (-n 1))
中,-
和 n
之间缺少 space。 Lisp 将把它读作一个应用于 1
的函数 -n
,这显然不是它的本意。
修复这些后一切正常:
(defun sum-rec (n)
(if (not (eq n 0))
(+ (sum-rec(- n 1)) n)
0))
> (format t "ans = ~A~%" (sum-rec 4))
ans = 10
我是 LISP 的初学者。我遇到了以下错误 ** - IF: variable SUM-REC has no value 但不知道如何解决它。这是我的代码。
(defun sum-rec (n)
(if (not (eq n 0))
(+ (sum-rec(-n 1) )n )
0
)
(format t "ans = ~a~%" (sum-rec 4))
不要使用 eq
比较数字,因为 eq
比较 objects 并且不能保证这对数字有效。使用 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
- 检查括号:它们是不平衡的。
- 请正确格式化代码:它有助于阅读它并找到错误。
- 在 Lisp 中,白色space 很重要:它分隔项目。在
(sum-rec (-n 1))
中,-
和n
之间缺少 space。 Lisp 将把它读作一个应用于1
的函数-n
,这显然不是它的本意。
修复这些后一切正常:
(defun sum-rec (n)
(if (not (eq n 0))
(+ (sum-rec(- n 1)) n)
0))
> (format t "ans = ~A~%" (sum-rec 4))
ans = 10