Nel Haskell Wikibook, foldr è implementato come segue:Accumulatore in foldr
foldr :: (a -> b -> b) -> b -> [a] -> b
foldr f acc [] = acc
foldr f acc (x:xs) = f x (foldr f acc xs)
Si afferma che il valore iniziale dell'accumulatore è impostato come argomento. Ma, a quanto ho capito, acc è il valore dell'identità per l'operazione (ad esempio 0 per la somma o 1 per il prodotto) e il suo valore non cambia durante l'esecuzione della funzione. Perché allora si fa riferimento qui e in altri testi come un accumulatore, implicando che cambia o accumula un valore passo dopo passo?
Posso vedere che un accumulatore è rilevante in una piega a sinistra, come ad esempio foldl, ma la spiegazione di wikibook è errata, e solo per simmetria, nel qual caso è sbagliato?
accumulazione negli foldl avviene sulla sinistra e l'accumulo in foldr avviene da destra. –
Sì, è interessante. Sarebbe probabilmente più appropriato chiamare il secondo argomento di 'f' l'accumulatore. Di solito scrivo i modelli foldr-esque con 'z' (connoting zero) o' nil' (connotando il caso del costruttore a cui corrisponde). – luqui