0

我在 LISP 中有这个函数,带有常规参数和可选参数 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

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

4

1 回答 1

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

  • 还有其他错误吗?

  • 唔。

  • 第三行的表格呢?

  • 这看起来也是不对的。

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

于 2012-06-05T20:55:22.873 回答