LISP - 无法使用可选参数调用函数

时间:2012-06-05 20:23:13

标签: function lisp optional-parameters

我在LISP中使用常规参数和可选的paremater n:

(defun lastplus (x &optional (n 0)) //default value for n is 0
    ( if (listp x) //if x is a list
        (
            (list (length x) (n)) //return list that contains length(x) and n
        )
        (n) //else return n
    )
)

我正在尝试在侦听器文件中使用该函数,但它给了我这个错误:

CL-USER 13 : 4 > (lastplus 2 8) 

Error: Undefined function N called with arguments ().

我使用LispWorks 6.0.1

你知道为什么我会收到这个错误吗?

1 个答案:

答案 0 :(得分:11)

(defun lastplus (x &optional (n 0)) //default value for n is 0
    ( if (listp x) //if x is a list
        (
            (list (length x) (n)) //return list that contains length(x) and n
        )
        (n) //else return n
    )
)

您的格式样式不是Lispy。

适应Lisp格式:

(defun lastplus (x &optional (n 0)) ; default value for n is 0
   (if (listp x) ; if x is a list
        ((list (length x) (n))) ; return list that contains length(x) and n
     (n)))

你说:cannot call function with optional parameter

当然可以。错误消息确实说了别的。您可以使用可选参数调用函数。错误在函数内部。

错误说明:Error: Undefined function N called with arguments ().

所以你正在调用一个名为N的函数,它不存在。没有争论。就像(n)一样。检查您的代码 - 您能找到(n)吗?

现在问问自己:

  • 函数调用是什么样的?

  • 答案:打开括号,函数,可能是一些参数,右括号

  • (n)的样子是什么?

  • 答案:它看起来像是一个函数调用。

  • 这就是你想要的吗?

  • 当然不是。

  • 你想要什么?

  • 变量值。

  • 这是什么样的?

  • 只是n

  • 还有其他错误吗?

  • 嗯。

  • 第三行表格怎么样?

  • 这看起来也错了。

  • 这也是错的。同样的错误。