計算機プログラムの構造と解釈 第二版 P29 問題1.21
たぶんこんな感じ。
1 #!/usr/local/bin/gosh 2 ;; -*- coding: utf-8 -*- 3 4 (use ggc.debug.trace) 5 6 (define (square n) 7 (* n n)) 8 9 10 (define (smallest-divisor n) 11 (find-divisor n 2)) 12 13 (define (find-divisor n test-divisor) 14 (cond ((> (square test-divisor) n) n) 15 ((divides? test-divisor n) test-divisor) 16 (else (find-divisor n (+ test-divisor 1))))) 17 18 (define (divides? a b) 19 (= (remainder b a) 0)) 20 21 ;; main 22 (define (main args) 23 24 (print "smallest-divisor 199: " (smallest-divisor 199)) 25 (print "smallest-divisor 1999: " (smallest-divisor 1999)) 26 (print "smallest-divisor 19999: " (smallest-divisor 19999)) 27 0)