lisp - 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")))))
测试可选函数参数的正确方法是什么?
解决方案
size-p,可选变量的名称,可以在关键字或可选参数的默认值之后指定,如果参数作为参数传递给函数调用,则为真。
所以你可以做一些事情,比如:
(defun _.chuck (array &optional (size 0 size-p))
(if size-p
(rest of your form...)))
推荐阅读
- json - 通过 jq 将 aws cli 解析为 CSV
- python - 损坏的 JPEG 数据:标记 0xdb OpenCV 与 macOS Mojave 之前的 20 个无关字节
- centroid - 从几何形状字段创建质心列会产生 AttributeError: 'NoneType' object has no attribute 'centroid'
- python-3.x - 为什么子处理 tcprewrite 会导致 EOF 错误?
- sql - 在 Azure 数据工厂中成功完成数据流后,为什么没有将数据传输到我的接收器表?
- r - XLConnect 安装在 R for windows 中失败
- vba - Word VBA:将注释和用户名转换为脚注;需要作者(现在在脚注中)加粗
- ios - 如何将在构建阶段创建的文件添加为捆绑资源?
- java - queued-work-looper Handler 在主线程上发布 Runnable 时创建的线程
- r - 查找长度不等的数据帧之间的最近坐标