エジプトの分数
与えられた分数「m/n」を「1/xの和」に書き換えるプログラム。
C言語で書かれた奥村晴彦さんのプログラムを参考にしつつ適当に書いてみた。
(define (f m n)
(if (= (remainder n m) 0)
(cons n ())
(cons
(+ (floor (/ n m)) 1)
(f
(- (* m (+ (floor (/ n m)) 1)) n)
(* n (+ (floor (/ n m)) 1))
)
)
)
)
(define (g lst)
(if (null? (cdr lst))
(print "1/" (car lst))
(print "1/" (car lst) " + ")
)
(if (not (null? (cdr lst))) (g (cdr lst)))
)
(define m 19)
(define n 55)
(print m "/" n " = ")
(g (f m n))
実行結果は次の通り。
> gosh .\main.scm
19/55 =
1/3 +
1/83 +
1/13695