Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2010-06-08

KMRCLを眺める(161) DEFUN-MEMO

| 13:48 | KMRCLを眺める(161) DEFUN-MEMO - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める(161) DEFUN-MEMO - わだばLisperになる

今回は、KMRCLのfunctions.lispからDEFUN-MEMOです。

前回のMEMOIZEを利用していますが、メモワイズ機能を付きのDEFUNというところです。

定義は、

(defmacro defun-memo (fn args &body body)
  "Define a memoized function"
  `(memoize (defun ,fn ,args . ,body)))

になっていて、DEFUNの返り値を使っているというのは珍しいですね。

(KL:DEFUN-MEMO FIB (N)
  (IF (< N 2)
      N
      (+ (FIB (1- N))
         (FIB (- N 2)))))

(FIB 100)
;⇒ 354224848179261915075

DEFUNを置き換えるだけで簡単にメモ化版関数が定義されます。