我知道'cond'是基于'if',但是'cond'能做'一切',如果可以的话? 感谢
答案 0 :(得分:8)
是。任何条件
(if x y z)
可以使用if
cond
转换为等效条件
(cond ((x y)
(t z)))
答案 1 :(得分:5)
“if”很可能被实现为围绕“cond”的宏。 “cond”在这里是真正的“原始”,而不是“如果”。
答案 2 :(得分:0)
根据您正在处理的口齿不清,if
和cond
肯定并非总是可互换。这是一个测试,以找出答案。我给出的结果来自麻省理工学院(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