HaskellにはMemoTireというパッケージがあります.

どうやら,関数のメモ化を自動でやってくれるみたい.

http://hackage.haskell.org/cgi-bin/hackage-scripts/package/MemoTrie

http://hackage.haskell.org/packages/archive/MemoTrie/0.4.5/doc/html/Data-MemoTrie.html

(試行錯誤の結果)たぶん,メモ化したい関数 f に

f' = memo f

とmemoをくっつけて,f の変りに f’ を使うとメモ化してくれるみたい.

しかし,情報が少なくて,これで良いのかよく分からない.

もっと,うまい使いかたがあるかもしれないし.うーん.

追記

これでも,良いみたい.

fib,mFib :: Integer -> Integer
fib 1 = 1
fib 2 = 1
fib n = mFib (n-1) + mFib (n-2)
mFib = memo fib

なんか,よく理解していないが,便利そうだ.

部分和問題

part, mPart :: Int -> [Int] -> Bool
part  [] = True
part _ [] = False
part n (x:xs) = mPart (n - x) xs || mPart n xs
mPart = memo2 part

まじめに書いたときより,少し遅い気がするが,お手軽だからこんなもんでしょう.