(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
答案 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
。