Lisp函数调用错误

wro*_*ame 4 lisp function-calls

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

(defun power (base exponent)
  (if (= exponent 0)
      1
    (* base (power (- exponent 1)))))
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试调用它时,我会遇到一些错误:

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.
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?如果我给它两个论点,它认为我给了它一个.如果我给它三,它认为我给它三.如果我给它一个,它认为我给了它一个......

Chr*_*sen 11

递归调用只有一个参数:

(power (- exponent 1))
Run Code Online (Sandbox Code Playgroud)

它应该是这样的:

(power base (- exponent 1))
Run Code Online (Sandbox Code Playgroud)


jtd*_*ubs 6

递归调用是你的问题.你忘了将基数作为第一个参数传递给你.

(* base (power (- exponent 1)))))

应该:

(* base (power base (- exponent 1)))))