首页 > 解决方案 > lisp:正确形成 if 语句

问题描述

作为我自己学习通用 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"))))) 

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

标签: lispcommon-lisp

解决方案


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

所以你可以做一些事情,比如:

(defun _.chuck (array &optional (size 0 size-p))
  (if size-p
      (rest of your form...)))

推荐阅读