2013-11-22 8 views

答えて

11

これは必要ありません。 foldl'の厳密さは、サンクが入力リストを横断するとすぐにサンクを排除することを可能にします。

foldl' (+) 0 [1,2,3]   foldl (+) 0    [1,2,3] 
foldl' (+) 1 [2,3]    foldl (+) (0 + 1)   [2,3] 
foldl' (+) 3 [3]    foldl (+) ((0 + 1) + 2)  [3] 
foldl' (+) 6 []    foldl (+) (((0 + 1) + 2) + 3) [] 
6          (((0 + 1) + 2) + 3) 
              ((1 + 2) + 3) 
              (3 + 3) 
              6 

しかし、あなたはscanlを行うときに、それはこれらのステップの各1

scanl (+) 0 [1,2,3] 
[ 0 
, 0 + 1 
, (0 + 1) + 2 
, ((0 + 1) + 2) + 3 
] 

を含むリストを作成し、あなたはサンクが強制される方法を制御することができます最終的な結果を見るためにリスト全体を横断しなければなりません。これにより、評価のコントロールがリストの消費者にプッシュされます。

6

まあscanl'はないが必要であるならば、私はわからないんだけど、あなたは一般的要素によるscanl要素の結果を消費するので、それはおそらく、foldl'よりもはるかに稀が必要である、とあなたが行くように、したがってそれを強制します正確にはfoldl'のようになります。

関連する問題