仮想計算機構

IT業界と無縁な派遣社員のブログ

エジプトの分数

エジプトの分数

与えられた分数「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

検算がめんどくさいが合ってるっぽい。
まださわり始めたばかりだがとりあえず動いてなにより。
参考文献