【问题标题】:I can't solve Tower of Hanoi on Lisp我无法在 Lisp 上解决河内塔问题
【发布时间】: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


    【解决方案1】:

    这是您的代码:

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

    (hanoi (- n 1))
    

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

    【讨论】:

      【解决方案2】:

      在 Lisp 中,您不会将函数称为 f(x),而是将它们称为 (f x),因此您对 hanoi 的递归调用必须是 (hanoi (- n 1))

      【讨论】:

        猜你喜欢
        • 2016-05-25
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多