nと互いに素で、nより小さい正整数の乗算。
まず、互いに素なことを調べるpredicateをつくる。
(define (gcd a b) (if (= b 0) a (gcd b (remainder a b)))) (define (comprime? a b) (= (gcd a b) 1))
これさえできれば、あとは2変数predicateを1変数predicateにしたり、掛け算したり。
(define (identity x) x) (define (multiplication-comprime n) (define (comprime-n? x) (comprime? n x)) (filtered-accmulate * 1 identity 1 inc n comprime-n?))
8未満で8と互いに素なのは1、3、5、7なので、
gosh> (multiplication-comprime 8) 105