在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: