我在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
你知道为什么我会收到这个错误吗?
答案 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
。
还有其他错误吗?
嗯。
第三行表格怎么样?
这看起来也错了。
这也是错的。同样的错误。。