我知道算法:
(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)
我怎么能调整这个?我查不出问题。
这是你的代码:
(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。
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |