2013-11-22 10 views

risposta

11

Non ce n'è bisogno. La severità di foldl' consente di eliminare immediatamente thunk mentre attraversa la sua lista di input.

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 

Ma quando lo fai scanl produce un elenco contenente ogni uno di quei passi

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

E si deve attraversare l'intero elenco per vedere il risultato finale che permette di controllare come i thunk sono costretti . Ciò spinge il controllo della valutazione al consumatore della lista.

6

Beh, io non sono sicuro se scanl' non bisogno è, ma probabilmente è un bisogno molto più rara di quanto foldl', dal momento che in genere consumano il risultato di scanl elemento per elemento, e quindi forzo come si va esattamente come fa foldl'.

Problemi correlati