可以'cond'完全取代'if'语句吗?

时间:2011-10-23 17:23:18

标签: lisp common-lisp

我知道'cond'是基于'if',但是'cond'能做'一切',如果可以的话? 感谢

3 个答案:

答案 0 :(得分:8)

是。任何条件

(if x y z)

可以使用if

cond转换为等效条件
(cond ((x y)
       (t z)))

答案 1 :(得分:5)

“if”很可能被实现为围绕“cond”的宏。 “cond”在这里是真正的“原始”,而不是“如果”。

答案 2 :(得分:0)

根据您正在处理的口齿不清,ifcond肯定并非总是可互换。这是一个测试,以找出答案。我给出的结果来自麻省理工学院(2014)的Scheme翻译。

测试

我们可能会设计使用new-if制作的cond方法:

(define (new-if predicate then-clause else-clause)
   (cond (predicate then-clause)
         (else  else-clause)))

我们可以尝试使用old-if和new-if:

(define (recursive-func a b)
    (if (= a 0) b
        (recursive-func a b)))

(recursive-func 0 1)

=> 1

使用new-if

(define (recursive-func a b)
    (new-if (= a 0) b
         (recursive-func a b)))

(recursive-func 0 1)

=> ;Aborting!: maximum recursion depth exceeded