我无法在Lisp上解决河内塔

我知道算法:

(defun Hanoi (n) (if (= n 1) 1 (+ (* 2 Hanoi(- n 1)) 1)))

但是,CLISP 表示

*** - IF: variable HANOI has no value
*** - IF: variable HANOI has no value

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

回答

这是你的代码:

(defun Hanoi (n) 
  (if (= n 1)
      1
      (+ (* 2 Hanoi (- n 1))
         1)))

错误说:

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

(* 2 Hanoi (- n 1))

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

(hanoi (- n 1))

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


以上是我无法在Lisp上解决河内塔的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>