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

Exercise 4.35 · 习题

Exercise 4.35: Write a procedure
an-integer-between that returns an integer between two given bounds.
This can be used to implement a procedure that finds Pythagorean triples, i.e.,
triples of integers (
i
,
j
,
k
) between the given bounds such that
i

j and i
2

+

j
2

=

k
2, as follows:

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

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

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

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

(require (= (+ (* i i) (* j j))

(* k k)))

(list i j k)))))

练习 4.35:编写一个过程 an-integer-between,它返回两个给定界限之间的某个整数。这可以用来实现一个寻找勾股数组的过程,即在给定界限内满足 i ≤ j 且 i² + j² = k² 的整数三元组 (i, j, k),如下所示:

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

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