使用递归 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
  1. 检查括号:它们是不平衡的。
  2. 请正确格式化代码:它有助于阅读它并找到错误。
  3. 在 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