- 62 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 19:44:58.10 ]
- haskellの遅延評価は、元々先行評価よりも遅い傾向にあるんだけどな・・・
(一部のみ、先行評価より速い) そもそも、reverseが単方向リストに不利なわけだが・・・ とりあえず、main/print(IOモナド使った関数)以外の関数を自作してみた ideone.com/15yhM 自分がHaskellに惚れたのは、IO関連以外は言葉遊びみたいな感じで自作出来るのが楽しいから (rangeはもうちょっと作りこめたかも・・・) 速さよりも、その構造を調べるのが楽しい data Natural = Zero | Succ (Natural) deraiving (Eq,Ord,Show,Read) 自然数の定義と、リストの定義が似ているのが分かる。 自然数は、その長さそのものが数字としての意味を持ち、リストは長さにも長さと言う意味はあるが、自然数との決定的な違いは、要素自体も値を持っているか?だけだと言うのが分かる 遅延評価生かしたプログラムなら、ファイル処理とかだろうけど、ideoneでファイルの読み込ませ方知らん(と言うか、在るのか?) ので、一応、こんなのも作ってみた(1から1000000までの足し算の合計のリストを作って、先頭の10要素を表示) ideone.com/insk7 簡約の様子を見てみると関数同士が絡み合って、一番外側の関数の終了条件のみで、他の関数の終了条件を満たして無くても、関数が終わるのが自然と理解できる もちろん、最初から無駄の無い処理を書かれると負ける。foldllやmapみたいな、状態を次の再帰に引き摺らない様に書けば、スタック消費が抑えられるって言うだけで、Haskell自体の最適化は弱い
|

|