长话短说我需要defun ts_div
并允许它成为常规/
基本上,我希望它接受一个包含任意数量的数字的列表(甚至没有),并且能够像这样调用它:
(ts_div (123 321 23))
或:
(ts_div somelist)
期望的结果:如果列表中有两个以上的项目,则第一项将被第二项除,其余项将被忽略。如果第二个数字为0,则应返回第一个数字的值。如果列表为空,则应返回0.
有关如何实现这一目标的任何建议?
旁注:我做了一些测试,尝试制作它的附加变体。基本上,总结在列表上下文中传递给它的任何数字,但正如预期的那样,它抱怨列表中的第一项不是函数,我一直无法弄清楚如何减轻它。
答案 0 :(得分:1)
嗯。
的内容(defun ts-div (list)
(check-type list list)
(destructuring-bind (&optional (first 0 got-first) (second 0 got-second) &rest ignored) list
(declare (ignore ignored))
(if got-second
(if (zerop second) first (/ first second))
(if got-first first 0))))
我认为可能有用。
CL-USER> (ts-div '())
0
CL-USER> (ts-div '(1))
1
CL-USER> (ts-div '(1 0))
1
CL-USER> (ts-div '(1 2))
1/2
CL-USER> (ts-div '(1 2 123))
1/2