2009/01/01

【scheme】letrecで階乗

letrecで階乗。んー。letrecって名前付きletと何か違う?

参考
7. 繰り返し
http://www.shido.info/lisp/scheme7.html
Y-Combinatorで階乗。
【Scheme】Y-Combinator(Yコンビネータ/不動点演算子)

http://ameblo.jp/valvallow/entry-10182574504.html
名前付きletで階乗。
【scheme】再帰だけでなくループできるのか
http://ameblo.jp/valvallow/entry-10186037975.html

(define fact-letrec
  (lambda (n)
    (letrec ((iter (lambda (counter result)
        (if (= counter 1)
        result
        (let ((m (- counter 1)))
          (iter m (* result m))))))) 
     (iter n n))))

(fact-letrec 5);;=> 120

【scheme】再帰だけでなくループできるのか http://ameblo.jp/valvallow/entry-10186037975.html

名前付きlet

(define loop-fact
  (lambda (n)
    (let loop ((count n)(result n))
        (if (= count 1)
          result
          (let ((m (- count 1)))
            (loop m (* result m)))))))

(loop-fact 5);;=> 120

0 件のコメント:

コメントを投稿