方案中的条件谓词后如何使用两个东西?

How can two things be used after a cond predicate in scheme?

(define (search-for-primes start end)
   (if (even? start)
       (search-for-primes (+ start 1) end)
       (cond ((< start end) (timed-prime-test start)
                        (search-for-primes (+ start 2) end)))))

这是 SICP 练习 1.22 的答案的一部分(请参阅底部的 link)。为什么在上面的代码中,这个人能够在 cond 条件 ( (< start end) ) 之后放两个东西?这是如何运作的?

如果我什至在终端中执行 (cond ((< 4 5) (< 4 3) (< 6 7))) 就会出现错误。

http://www.billthelizard.com/2010/02/sicp-exercise-122-timed-prime-test.html

cond中,每个条件后面都有一个隐含的begin,所以你可以在后面写任意数量的表达式,但只有最后一个的值作为该条件的值返回.事实上,你的例子 有效 :

(cond ((< 4 5) (< 4 3) (< 6 7)))
=> #t

以上等同于:

(cond ((< 4 5)
       (begin
         (< 4 3)
         (< 6 7))))

那里发生了什么?条件 (< 4 5) 被评估为 #t,然后 (< 4 3) 被评估(但是值丢失了,你没有对它做任何事情)最后表达式 (< 6 7) 是评估并返回结果:#t.