[過去ログ]
関数型プログラミング言語Haskell Part33 (1002レス)
関数型プログラミング言語Haskell Part33 http://mevius.5ch.net/test/read.cgi/tech/1581326256/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
709: デフォルトの名無しさん [sage] 2021/02/06(土) 09:10:00.64 ID:8eeMDweD >>707 解説ありがとうございます やはりメモ化するしかないんだと思います 問題はそれがプログラマが明示的に自分でやらないといけないのか、コンパイラが自分でやってくれるのかの差なんだと思います Haskellは純粋なcall by nameではなく、call by needのシステムの中にメモ化を備えていてプログラマがメモ化するように書いてなくても勝手にメモ化できるものをメモ化してくれるのがすごいとこだと思うんですけど、例えば>>703の2番目の例で最初見た時「なんでこの定義式でメモ化が効くんだ?」とさっぱりわからなかったのが、実はHaskellのcall by needのシステムをうまく利用してるらしいとわかったのが最初なんです で二重の漸化式だとうまくいかないなと もちろん二重の全炊きでも上手くsuffixの取り方を変えたりすると同様の方法でメモ化できるんですけど、それでは結局「Haskellの機能を利用して明示的にメモ化を指定することなく高速化した」事にはなりません まぁコレはしょうがないんでしょうね どんな計算も常にメモ化して常に同じ評価式を2度扱う事を防いでたらそんなの逆に使い物になりませんからね http://mevius.5ch.net/test/read.cgi/tech/1581326256/709
712: デフォルトの名無しさん [sage] 2021/02/06(土) 21:12:54.72 ID:HlAr7yEc >>709 今回の話の本質ではないので、へーそうなんだ、 程度に聞いてくれればいいのですが、 >>703 の2番目の例とは、 f = 0 : 1 : zipWith (+) f (tail f) のことでしょうか。 もしそうなら、これはメモ化ではないですよ。 (このテクニックをなんと呼ぶのかは知りませんが) メモ化というのは簡単にいえば、 関数の同じ引数に対する2度目(以降)の適用に備えて、 その引数に対する1度目の関数の値をその引数とペアにして どこかにメモしておくことです。 ポイントは、2度目以降に備えることではなく、 引数と関数値のペアをメモしておくことです。 それを踏まえて、>>703 の2番目の例において、 では何が関数で、引数と関数値のペアはどこにメモされているか、 考えてみてください。 ただ、言葉の意味は時代と共に変化していくものなので、 今はこれも広義にメモ化と言うことになっているのでしたら、すいません。 私の方が勉強不足です。 http://mevius.5ch.net/test/read.cgi/tech/1581326256/712
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.038s