gpt4 book ai didi

lisp - 普通 lisp 中的类型安全和参数安全除法

转载 作者:太空宇宙 更新时间:2023-11-03 18:54:57 24 4
gpt4 key购买 nike

长话短说,我需要defun ts_div 并允许它成为常规/

的类型安全和“参数安全”版本

基本上,我希望它接受一个包含任意数量数字(甚至没有)的列表,并且能够像这样调用它:

(ts_div (123 321 23))

或:

(ts_div somelist)

期望的结果:如果列表中有两个以上的项目,第一个除以第二个,其余的被忽略。如果第二个数字是 0,它应该返回第一个数字的值。如果列表为空,则应返回 0。

关于如何实现这一点有什么建议吗?

旁注:我做了一些测试,试图制作它的加法变体。基本上,总结在列表上下文中传递给它的任何数字,但正如预期的那样,它提示列表中的第一项不是函数,我一直无法弄清楚这是如何缓解的。

最佳答案

嗯。类似

的东西
(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

关于lisp - 普通 lisp 中的类型安全和参数安全除法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8937121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com