lisp:if语句的格式正确

lis*_*ons 1 lisp common-lisp

作为自己学习普通口语的一项任务,我正在尝试重新创建lodash

在重新创建的过程中_.chunk,我编写了以下代码来测试可选参数

(defun _.chunk (array &optional size)
    (if (size)
        (write ("there") )
        (write ("not") )
    ) 
)  
Run Code Online (Sandbox Code Playgroud)

设置(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"))))) 
Run Code Online (Sandbox Code Playgroud)

测试可选功能参数的正确方法是什么?

Sim*_*abo 6

如果将参数作为参数传递给函数调用,则可以在关键字或可选参数的默认值之后指定的可选变量的名称size-p为true。

因此您可以执行以下操作:

(defun _.chuck (array &optional (size 0 size-p))
  (if size-p
      (rest of your form...)))
Run Code Online (Sandbox Code Playgroud)