首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可互换条件

可互换条件
EN

Stack Overflow用户
提问于 2014-05-01 12:49:30
回答 1查看 91关注 0票数 1

今天我读了一本书“象征性计算的绅士介绍”,我开始练习4.29。在这里,听起来是这样的:“编写逻辑版本--使用IF和COND而不是和。”

在这里,它是如何在原文中定义的:

代码语言:javascript
复制
(defun logical-and (x y) (and x y t))

我就是这样用cond来定义它的,如果:

代码语言:javascript
复制
(defun logical-and (x y)
  (cond ((and x y) t) 
    (t nil)))

(defun logical-and (x y) 
  (if (and x y) t nil))

这就是在练习的答案中如何定义它们的方法。

代码语言:javascript
复制
(defun logical-and (x y)
  (cond (x (cond (y t)))))

(defun logical-and (x y)
  (if x (if y t)))

所以问题是,所有这些定义都是平等的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-30 22:20:07

这三种情况在行为上都是明确的。特别地,如果x和y都是非零的,则函数返回符号t,否则返回零。

在文本中的定义中,它只使用和操作符t作为最后一个参数。这是因为如果x或y都是0,则短路并返回零,但是如果x和y都为真,则返回最后一个表达式的结果,即t。

在您的cond定义中,如果x和y都为true,则返回t的第一个子句匹配,并且在所有其他情况下(即x或y为false)返回零。

如果定义类似,则返回t当且仅当x和y都为真,否则为零。

练习的答案是有效的,因为cond返回的是nil,如果没有子句匹配,如果返回nil,如果条件是false,并且没有指定任何其他子句。因此,cond定义仅在满足两个条件(即x为true,y为true)时才返回t,如果条件为真,且不返回零,则if定义不为真。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23408016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档