(define (find-divisor n test-divisor) (cond ((> (square test-divisor) n) n) ((divides? n test-divisor) test-divisor) (else (find-divisor n (+ test-divisor 1)))))
(define (smallest-divisor n) (find-divisor n 2))
(define (prime? n) (= (smallest-divisor n) n))
문제풀이
a. unique-pair
문제 앞 절의 flatmap 설명을 이해했다면, 쌍으로 이루어진 리스트를 만들려고 할때 flatmap을 이용하면 편하다는 것을 떠올릴 수 있을 것입니다. 단순히 map 프로시저만 사용한다면, 하나의 i에 하나의 리스트밖에 만들어낼 수 없습니다. 하지만 flatmap을 이용하면 하나의 i에 대해 (j,i)쌍을 여러개 만들어서 이어붙일 수 있습니다.
(define (unique-pairs n) (flatmap (lambda (i) (map (lambda (j) (list i j)) (enumerate-interval1 (- i 1)))) (enumerate-interval1 n)))