灯下 登录
计算机科学 / SICP / 4.3.1 Amb and Search

Exercise 4.37 · 习题

Exercise 4.37: Ben Bitdiddle claims that the
following method for generating Pythagorean triples is more efficient than the
one in Exercise 4.35. Is he correct? (Hint: Consider the number of
possibilities that must be explored.)

(define (a-pythagorean-triple-between low high)

(let ((i (an-integer-between low high))

(hsq (* high high)))

(let ((j (an-integer-between i high)))

(let ((ksq (+ (* i i) (* j j))))

(require (>= hsq ksq))

(let ((k (sqrt ksq)))

(require (integer? k))

(list i j k))))))

练习 4.37:Ben Bitdiddle 声称,以下生成勾股数组的方法比练习 4.35 中的方法更高效。他的判断正确吗?(提示:考虑必须探索的可能性数目。)

(define (a-pythagorean-triple-between low high)
(let ((i (an-integer-between low high))
(hsq (* high high)))
(let ((j (an-integer-between i high)))
(let ((ksq (+ (* i i) (* j j))))
(require (>= hsq ksq))
(let ((k (sqrt ksq)))
(require (integer? k))
(list i j k))))))

Racket #lang sicp
(define (a-pythagorean-triple-between low high)
 (let ((i (an-integer-between low high))
 (hsq (* high high)))
 (let ((j (an-integer-between i high)))
 (let ((ksq (+ (* i i) (* j j))))
 (require (>= hsq ksq))
 (let ((k (sqrt ksq)))
 (require (integer? k))
 (list i j k))))))