Lisp函数调用语法

Lisp函数调用语法,lisp,syntax-error,user-defined-functions,Lisp,Syntax Error,User Defined Functions,我试图编写一个递归代码来执行x^y,但无论我如何更新代码,问题都会给我带来错误 守则: (defun power(x y) (if(> y 0) (* x (power(x (- y 1)))) (1))) 错误: CL-USER 11 : 5 >Power 2 3 Error: Undefined operator X in form (X (- Y 1)). CL-USER 11 : 5 >power(2 3) Illegal argument in funct

我试图编写一个递归代码来执行
x^y
,但无论我如何更新代码,问题都会给我带来错误

守则:

    (defun power(x y) (if(> y 0) (* x (power(x (- y 1)))) (1)))
错误:

CL-USER 11 : 5 >Power 2 3
Error: Undefined operator X in form (X (- Y 1)).
CL-USER 11 : 5 >power(2 3)
Illegal argument in functor position: 2 in (2 3).
错误:

CL-USER 11 : 5 >Power 2 3
Error: Undefined operator X in form (X (- Y 1)).
CL-USER 11 : 5 >power(2 3)
Illegal argument in functor position: 2 in (2 3).

您以错误的方式调用函数。在lisps中,函数调用的形式如下:

(f a b c) 
不是

在递归定义中有
(幂(x(-y 1)))
,而递归定义中又有
(x(-y 1))
,因此出现错误:x不是函数

使用
(幂x(-y 1))
将定义为:

(defun power (x y)
   (if (> y 0)
      (* x
           (power x (- y 1))) 
      1))

并将其命名为
(power 2 3)
,您正在调用的代码包括:

(power (x (- y 1)))
因此,
power
(x(-y 1))
作为参数调用。是否确实要将
x
作为函数调用?

在Lisp表达式中编写(x…)时,您正在断言x是要对参数调用的函数

问题是表达式中的括号太多。当你写(幂)的时候。。
您已做出此断言。请改为写入(幂x…。

您不能使用括号进行分组,因为CL认为您要调用函数x和函数1。请删除多余部分,如下所示:

 (defun power(x y) 
     (if (> y 0) 
         (* x (power x (- y 1)))
         1))
括号位于外部,就像在函数中一样:

 (power 2 3) ;==> 8

为了稍微扩展上一个(正确)答案,此版本使用了一些惯用函数:

(defun power (x y)
  (if (plusp y)
    (* x (power x (1- y)))
    1))

else
分支中将
(1)
替换为
1
,它将是正确的。@TerjeD.发现得好!