【发布时间】:2019-11-26 00:30:19
【问题描述】:
作为自己学习通用 lisp 的任务,我正在尝试重新创建 lodash。
在重新创建_.chunk 的过程中,我编写了以下代码来测试可选参数
(defun _.chunk (array &optional size)
(if (size)
(write ("there") )
(write ("not") )
)
)
设置(setf x #('a 'b 'c 'd)),然后运行(_.chunk x),出现错误:
; caught ERROR:
; illegal function call
; (SB-INT:NAMED-LAMBDA _.CHUNK
; (ARRAY &OPTIONAL SIZE)
; (BLOCK _.CHUNK
; (IF (SIZE)
; (WRITE ("there"))
; (WRITE ("not")))))
测试可选函数参数的正确方法是什么?
【问题讨论】:
-
好吧,对于初学者来说,不要试图将它作为一个函数来调用!不太正确的方法(但在许多情况下已经足够好了):
(if size (write "there") (write "not there"))。不要将函数调用括号括在不是函数调用的东西上! -
真实方式:
&optional (size 0 size-p):变量名,默认值,存在指示变量名。现在如果size-p为真,则指定size。即使size是0,size-p也会告诉您它是显式指定的还是默认的。
标签: lisp common-lisp