我从互联网上获得了这个代码,我没有得到(#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)
这是对该cond陈述的滥用; 虽然它在Common Lisp中是惯用的,但在Scheme中,等效和惯用语法应该是:
(else #f)
Run Code Online (Sandbox Code Playgroud)
这只是一种说法:如果所有其他条件都失败,则返回false.为什么会这样?好了,看起来像一个子句中(#t <anything>)的<anything>表现总是会被评估,因为该条件为真.这就是为什么else应该首先使用,以使意图明确.
else此处使用还有一个额外的好处:解释器强制执行else只能出现在最后一个条件中的限制,而(#t <anything>)在任何时候都可能出现这种限制,从而导致潜在的问题,因为它之后的任何条件都永远不会到达.