(#t #f)在Scheme函数中意味着什么?

Kal*_*ngh 1 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)))
Run Code Online (Sandbox Code Playgroud)

Ósc*_*pez 5

这是对该cond陈述的滥用; 虽然它在Common Lisp中是惯用的,但在Scheme中,等效和惯用语法应该是:

(else #f)
Run Code Online (Sandbox Code Playgroud)

这只是一种说法:如果所有其他条件都失败,则返回false.为什么会这样?好了,看起来像一个子句中(#t <anything>)<anything>表现总是会被评估,因为该条件为真.这就是为什么else应该首先使用,以使意图明确.

else此处使用还有一个额外的好处:解释器强制执行else只能出现在最后一个条件中的限制,而(#t <anything>)在任何时候都可能出现这种限制,从而导致潜在的问题,因为它之后的任何条件都永远不会到达.