在方案中的cond谓词之后如何使用两件事?

时间:2016-03-08 14:39:59

标签: scheme sicp

(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答案的一部分(见底部的链接)。为什么在上面的代码中,这个人能够在cond条件之后放两个东西((&lt; start end))?这是如何运作的?

如果我甚至在终端中进行(cond((<&lt; 4 5)(&lt; 4 3)(&lt; 6 7)))则会出现错误。

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

1 个答案:

答案 0 :(得分:2)

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