計算機プログラムの構造と解釈 第二版 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)