2005/04/20

名前つきletの2重化という知恵をいただいたので、代入を葬ることができました。条件式も少し整理したので、これで少しはかっこよくなったかな。

(define prime-list
(let ((primes '()))
(lambda (upper-int)
(let next-primes ((test-int 2) (primes primes))
(let next-divider ((test-int test-int)
(ls (reverse primes)))
(cond ((null? ls)
(next-primes (+ test-int 1) (cons test-int (reverse primes))))
((> test-int upper-int)
primes)
((integer? (/ test-int (car ls)))
(next-primes (+ test-int 1) (reverse primes)))
(else
(next-divider test-int (cdr ls)))))))))

「test-int の除算チェックを √test-int までに制限」とかの工夫は、すぐにでも追加できそうな気がする。

0 件のコメント: