我无法在 Lisp 上解决河内塔

1 lisp common-lisp

我知道算法:

(defun Hanoi (n) (if (= n 1) 1 (+ (* 2 Hanoi(- n 1)) 1)))
Run Code Online (Sandbox Code Playgroud)

但是,CLISP 表示

*** - IF: variable HANOI has no value
Run Code Online (Sandbox Code Playgroud)

我怎么能调整这个?我查不出问题。

cor*_*ump 7

这是你的代码:

(defun Hanoi (n) 
  (if (= n 1)
      1
      (+ (* 2 Hanoi (- n 1))
         1)))
Run Code Online (Sandbox Code Playgroud)

错误说:

*** - IF: variable HANOI has no value
Run Code Online (Sandbox Code Playgroud)

因此,在 IF您将引用HANOI作为变量进行引用时,此时当前没有绑定此类变量。如果我们仔细观察,我们可以看到以下表达式:

(* 2 Hanoi (- n 1))
Run Code Online (Sandbox Code Playgroud)

这个表达式是函数*对 3 个参数的应用,即2,Hanoi(- n 1)。第二个参数 ,Hanoi代表一个变量。但是这里没有定义这样的变量(例如,带有let)。您应该#'Hanoi使用与乘法或加法相同的语法来调用函数,即:将函数的名称及其参数括在括号中:

(hanoi (- n 1))
Run Code Online (Sandbox Code Playgroud)

有关 Common Lisp 的资源,请参阅https://common-lisp.net/documentation