方案中的条件谓词后如何使用两个东西?
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
.
(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
.