Um Länge einer Liste zu berechnen, eine foldr verwenden, würde man etwas tun:Haskell-Funktion für Listenlänge
foldr (\_ acc -> acc + 1) 0
baut auf der Idee, dass die Klappfunktion das zweite Argument erhöhen muss, kam ich up mit diesem (und es ist falsch):
foldr ((+1) . (flip const)) 0`
Eine weitere Untersuchung des Typs zeigt dies:
(+1) . (flip const) :: Num (c -> c) => a -> c -> c
Haskell higher order function to calculate length Es ist ein interessanter Kommentar auf dieser Seite, die ich wirklich nicht verstehen kann
foldr (((+1).).(flip const)) 0
Kann mir jemand erklären, wie funktioniert eigentlich, dass Zusammensetzung arbeiten?
Dies sieht so aus, als wäre es mit einem Tool erstellt worden, wie [pointfree] (https://hackage.haskell.org/package/pointfree) .... '(+1). (flip const) 'bedeutet im Grunde, dass man für jede Anwendung dieser Funktion eins addiert, unabhängig von dem ersten Parameter (dafür steht der Flip const). Es ist wie '(\ a b -> (b + 1))' – Arnon