如何在Common Lisp中实现短路的“ and”宏?

席德

假定宏将采用布尔类型ab如果anil,则宏应返回nil(不进行任何评估b),否则返回b你怎么做到这一点?

sds

这实际上取决于您可以使用什么例如,or有空吗?ifcond

这是一个例子:

(defmacro and (a b)
  `(if ,a ,b nil)

编辑。在回应评论时,or更为复杂,因为我们必须避免双重评估:

(defmacro or (a b)
  (let ((v (gensym "OR")))
    `(let ((,v ,a))
       (if ,v ,v ,b))))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Common Lisp中实现短路的“和”宏?

来自分类Dev

如何在Common Lisp中定义宏时间的包装

来自分类Dev

如何在Common Lisp中定义宏时间的包装

来自分类Dev

如何在宏中实现文档?

来自分类Dev

LISP:如何跟踪宏

来自分类Dev

有什么办法可以看到Common Lisp中内置宏的实现吗?

来自分类Dev

计算Common Lisp宏的参数

来自分类Dev

计算Common Lisp宏的参数

来自分类Dev

计算Common Lisp宏的参数

来自分类Dev

如何在阅读器宏中评估Lisp代码?

来自分类Dev

如何在Lisp宏中修复“ X不是数字”

来自分类Dev

如何在阅读器宏中评估Lisp代码?

来自分类Dev

如何从过程宏中处理扩展宏?

来自分类Dev

是否可以在方案中实施Common Lisp的宏系统?

来自分类Dev

在Common Lisp / StumpWM中定义宏时遇到问题

来自分类Dev

如何在Ruby中实现Common Lisp的mapcar?

来自分类Dev

将宏从Common Lisp转换为Clojure

来自分类Dev

如何实现 Lispian cond 宏?

来自分类Dev

在Common Lisp中,如何定义一个宏扩展为空(而不是`nil`)?

来自分类Dev

在Common Lisp中,如何定义一个扩展为无(而不是`nil`)的宏?

来自分类Dev

如何在LibreOffice中运行python宏?

来自分类Dev

如何在Clojure宏中包装异常?

来自分类Dev

如何在PowerPoint 2013中记录宏

来自分类Dev

如何在vsVim的宏中记录“(”?

来自分类Dev

如何在Clojure宏中绑定变量?

来自分类Dev

如何在C中解析链接的宏?

来自分类Dev

如何在Rust宏中匹配特征?

来自分类Dev

如何在Rust中迭代宏的参数?

来自分类Dev

如何在Google文档中创建宏