Per calcolare la lunghezza di una lista, utilizzando un foldr, si potrebbe fare qualcosa di simile:funzione Haskell per la lunghezza lista
foldr (\_ acc -> acc + 1) 0
espandere ulteriormente l'idea che la funzione di ripiegamento ha bisogno di incrementare il secondo argomento, mi sono con questo (ed è sbagliato):
foldr ((+1) . (flip const)) 0`
un'ulteriore ispezione del tipo rivela questo:
(+1) . (flip const) :: Num (c -> c) => a -> c -> c
Haskell higher order function to calculate length C'è un interessante commento su quella pagina, che non riesco a capire davvero
foldr (((+1).).(flip const)) 0
Qualcuno può spiegare in che modo che la composizione in realtà il lavoro?
Sembra che sia stato generato con alcuni strumenti, come [pointfree] (https://hackage.haskell.org/package/pointfree) .... '(+1). (flip const) 'fondamentalmente significa aggiungere uno per ogni applicazione di questa funzione, indipendentemente dal primo parametro (questo è ciò che il flip const è lì per). È come '(\ a b -> (b + 1))' – Arnon