もともとは、values、call-with-valuesを むりやり使うという趣旨だったので、 色々変かも。 valuesを使った関数の例 自然数nは必ず、 n = (2^k)*q ; qは奇数 という形に書く事ができる(例えば、80 = (2^4)*5、246 = (2^1)*123)。 自然数をこのような形に表す事を、 とりあえず「kq分解」とか「偶奇分解」とか呼ぶ事にする (実際には、そんな言葉は無い)。 このkとqを求める関数は、valuesを使って次のように書ける。 (define (k&q n) (let loop ((k 0) (q n)) (if (even? q) (loop (+ k 1) (/ q 2)) (values k q)))) この関数を使って、ミラー・ラビンテストを行なう関数を作る。 フェルマー(Fermat)テスト nが素数の場合、1<=a<nとなるa