gpt4 book ai didi

macros - 我的第一个 Lisp 宏;漏水了吗?

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

我一直在研究 Practical Common Lisp作为练习,决定编写一个宏来确定一个数字是否是另一个数字的倍数:

(defmacro multp (value factor)<br/>
`(= (rem ,value ,factor) 0))

这样: (multp 40 10)评估为真而 (multp 40 13)

问题是这个宏leak某种程度上来说?这也是“好”的 Lisp 吗?是否已有我可以使用的现有函数/宏?

最佳答案

Siebel 对可能的泄漏源进行了详尽的总结(无论如何对于简单的情况),这里没有任何这些。 valuefactor 仅按顺序计算一次,rem 没有任何副作用。

但这不是好的 Lisp,因为在这种情况下没有理由使用宏。一个函数

(defun multp (value factor)
(zerop (rem value factor)))

对于所有实际用途都是相同的。 (注意 zerop 的使用。我认为在这种情况下它使事情变得更清楚,但在您需要强调的情况下,如果您正在测试的值不是零,则它可能仍然有意义, (= ... 0) 可能更好)

关于macros - 我的第一个 Lisp 宏;漏水了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60260/

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