今天我读了一本书“象征性计算的绅士介绍”,我开始练习4.29。在这里,听起来是这样的:“编写逻辑版本--使用IF和COND而不是和。”
在这里,它是如何在原文中定义的:
(defun logical-and (x y) (and x y t))我就是这样用cond来定义它的,如果:
(defun logical-and (x y)
(cond ((and x y) t)
(t nil)))
(defun logical-and (x y)
(if (and x y) t nil))这就是在练习的答案中如何定义它们的方法。
(defun logical-and (x y)
(cond (x (cond (y t)))))
(defun logical-and (x y)
(if x (if y t)))所以问题是,所有这些定义都是平等的吗?
发布于 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定义不为真。
https://stackoverflow.com/questions/23408016
复制相似问题