在Scheme函数中(#t#f)是什么意思?
我从互联网上获得了这段代码,但我没有理解函数最后一行中在Scheme函数中(#t#f)是什么意思?,scheme,Scheme,我从互联网上获得了这段代码,但我没有理解函数最后一行中(#t#f)的含义。请详细说明这一点 (define (equal? S1 S2) (cond ((and (not (pair? S1)) (not (pair? S2))) (eqv? S1 S2)) ((or (not (pair? S1)) (not (pair? S2))) #f) ((equal? (car S1) (car S2)) (equal? (cdr S1) (cdr S2
(#t#f)
的含义。请详细说明这一点
(define (equal? S1 S2)
(cond ((and (not (pair? S1)) (not (pair? S2))) (eqv? S1 S2))
((or (not (pair? S1)) (not (pair? S2))) #f)
((equal? (car S1) (car S2)) (equal? (cdr S1) (cdr S2)))
(#t #f)))
这是对
cond
语句的滥用;尽管它在Common Lisp中是惯用的,但在Scheme中,等效的惯用语法应该是:
(else #f)
这只是一种说法:如果所有其他条件都失败,那么返回false。为什么有效?好的,在一个看起来像(#t)
的子句中,
表达式将始终被计算,因为条件为true。这就是为什么首先应该使用else
,以明确意图
在这里使用
else
还有一个额外的优点:解释器强制执行else
只能在最后一个条件下出现的限制,而(#t)
可以在任何时候出现,导致潜在的问题,因为它之后的任何条件都永远无法达到。@user2864740我不同意。西部最快的枪是一个特征,而不是一个bug: