[過去ログ]
関数型プログラミング言語Haskell Part33 (1002レス)
関数型プログラミング言語Haskell Part33 http://mevius.5ch.net/test/read.cgi/tech/1581326256/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
707: デフォルトの名無しさん [sage] 2021/02/05(金) 19:44:21.42 ID:DBOaHn9B >>703 その遅くて使い物にならない計算を、 可読性をあまり犠牲にしないで爆速にする方法に、 メモ化(memoization)というテクニックがあります。 (その代わり、当然メモリを使います) メモ化関数 memoize が用意されていれば、 n 番目のフィボナッチ数を求める関数 fib は 次のように書けます。 -- メモ化 fib :: Int -> Integer fib = fix (memoize . fib') -- フィボナッチ計算の本体 fib' :: (Int -> Integer) -> Int -> Integer fib' f 0 = 0 fib' f 1 = 1 fib' f n = f (n-1) + f (n-2) メモ化関数を提供するパッケージは色々あります。 また、メモ化の仕組みの基礎や本質を学びたいのなら、 次のごく短いブログ記事がおすすめです。 https://kseo.github.io/posts/2017-01-14-memoization-in-hasekll.html この記事の最後の fibMemo 関数について、 適当な小さな値に適用させたものを 自分でノートに展開してみるといいです。 http://mevius.5ch.net/test/read.cgi/tech/1581326256/707
708: デフォルトの名無しさん [sage] 2021/02/05(金) 20:00:27.08 ID:DBOaHn9B >>707 すいません。 肝腎の memoize 関数の定義を書き忘れました。 memoize :: (Int -> a) -> (Int -> a) memoize f = (map f [0 ..] !!) 先に紹介した記事にこれを導く過程や、 より速くより一般化する方法を学びたい人へ向けた URL紹介が載っています。 http://mevius.5ch.net/test/read.cgi/tech/1581326256/708
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.048s