【发布时间】:2021-05-21 11:08:44
【问题描述】:
我知道算法:
(defun Hanoi (n) (if (= n 1) 1 (+ (* 2 Hanoi(- n 1)) 1)))
但是,CLISP说
*** - IF: variable HANOI has no value
我该如何调整呢?我找不到问题所在。
【问题讨论】:
标签: lisp common-lisp
我知道算法:
(defun Hanoi (n) (if (= n 1) 1 (+ (* 2 Hanoi(- n 1)) 1)))
但是,CLISP说
*** - IF: variable HANOI has no value
我该如何调整呢?我找不到问题所在。
【问题讨论】:
标签: lisp common-lisp
这是您的代码:
(defun Hanoi (n)
(if (= n 1)
1
(+ (* 2 Hanoi (- n 1))
1)))
错误提示:
*** - IF: variable HANOI has no value
因此,在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 中,您不会将函数称为 f(x),而是将它们称为 (f x),因此您对 hanoi 的递归调用必须是 (hanoi (- n 1))。
【讨论】: