CommonLisp Scheme Part10at TECH
CommonLisp Scheme Part10 - 暇つぶし2ch579:デフォルトの名無しさん
04/06/10 12:07
>>576 ありがとうございます。
URLリンク(mitpress.mit.edu)
URLリンク(www.geocities.co.jp)
を参考にして、以下のコードを書いてみました。

(define (memoize proc)
 (let ((cache '()))
  (lambda args
   (let ((hit (assoc args cache)))
    (if hit (cdr hit)
      (let ((result (apply proc args)))
       (set! cache (cons (cons args result) cache))
       result))))))

(define memo-fib
 (memoize (lambda (n)
       (if (< n 2)
         1
         (+ (memo-fib (- n 1))
          (memo-fib (- n 2)))))))

大変うまくいきました。コードはほぼ定義どおりで、しかも (memo-fib 10000)でも
即時に演算が終わるようになりました。memoize って素晴らしいです。

数年前、Java で数値計算をしていて、再帰で書いたら同じ問題に遭遇して、仕方なく
ループで書き直したことがあります。あのときに memoize を知っていたらなあ。

URLリンク(mitpress.mit.edu)
は私には難しいので、時間をかけて考えてみます。


ということで皆さま、いろいろありがとうございました。


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch