Lisp函数调用错误

标签 lisp function-calls

我写了一个这样的 Lisp 函数:

(defun power (base exponent)
  (if (= exponent 0)
      1
    (* base (power (- exponent 1)))))

然而,当我尝试调用它时,出现了一些错误:

CL-USER 2 > (power 2 3)

Error: POWER got 1 arg, wanted at least 2.
  1 (abort) Return to level 0.
  2 Return to top loop level 0.

Type :b for backtrace or :c <option number> to proceed.
Type :bug-form "<subject>" for a bug report template or :? for other options.

CL-USER 3 : 1 > (power 2)

Error: POWER got 1 arg, wanted at least 2.
  1 (abort) Return to level 1.
  2 Return to debug level 1.
  3 Return to level 0.
  4 Return to top loop level 0.

Type :b for backtrace or :c <option number> to proceed.
Type :bug-form "<subject>" for a bug report template or :? for other options.

CL-USER 4 : 2 > (power 2 3 4)

Error: POWER got 3 args, wanted 2.
  1 (continue) Ignore the extra arg.
  2 (abort) Return to level 2.
  3 Return to debug level 2.
  4 Return to level 1.
  5 Return to debug level 1.
  6 Return to level 0.
  7 Return to top loop level 0.

Type :b for backtrace or :c <option number> to proceed.
Type :bug-form "<subject>" for a bug report template or :? for other options.

这是怎么回事?如果我给它两个参数,它认为我给了它一个。如果我给它三个,它就认为我给了它三个。如果我给它一个,它就认为我给了它一个...

最佳答案

只有一个参数的递归调用:

(power (- exponent 1))

应该是这样的:

(power base (- exponent 1))

关于Lisp函数调用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4222177/

相关文章:

javascript - 尝试在代码执行中添加延迟(在警报发生之前)

javascript - 函数调用不适用于 'click' 事件处理程序

Lisp - 从对列表中删除实例

recursion - Recur 不会在完美的尾递归函数中编译

lisp - Jscheme 如何查找列表中的所有事件?

c - 此汇编函数调用是否安全/完整?

vb.net - 在 VB.NET 中直接调用模块函数是一种好习惯吗?

clojure - Clojure 宏中的文本替换功能,如 C 的#define

vim - 使用 SLIMV 编写 Lisp 代码,如何在不禁用 paredit.vim 的情况下插入单个“?

C 代码解析器,用于跟踪项目中的函数调用和变量访问(emacs 兼容性会很好)