当前位置:  开发笔记 > 编程语言 > 正文

我的第一个Lisp宏; 它漏了吗?

如何解决《我的第一个Lisp宏;它漏了吗?》经验,为你挑选了1个好方法。

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

(defmacro multp (value factor)
`(= (rem ,value ,factor) 0))

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

问题是这个宏在某种程度上泄漏了吗?也是这个"好"的Lisp?是否已经存在我可以使用的现有功能/宏?



1> 小智..:

Siebel给出了可能的泄漏源的广泛破坏(对于简单的情况),这里没有任何泄漏.两者valuefactor仅按顺序评估一次,并且rem没有任何副作用.

这不是好Lisp,因为在这种情况下没有理由使用宏.一个功能

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

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

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有