Ich beschäftige mich ein wenig mit funktionalen Sprachen (derzeit mit Haskell). Ich bin auf eine Haskell-basierte Aufgabe gestoßen, die die Definition von map und filter in Form von foldr erfordert. Ich verstehe beim besten Willen nicht ganz, wie ich das anstellen soll.
Wenn ich zum Beispiel eine Map-Funktion definiere wie:
map' :: (a -> b) -> [a] -> [b]
map' f [] = []
map' f (x:xs) = foldr (\x xs -> (f x):xs) [] xs
Ich weiß nicht, warum das erste Element der Liste immer ignoriert wird. Das bedeutet, dass:
map' (*2) [1,2,3,4]
ergibt [4,6,8] anstelle von [2,4,6,8]
Ähnliches gilt für die Funktion "Mein Filter":
filter' :: (a -> Bool) -> [a] -> [a]
filter' p [] = []
filter' p (x:xs) = foldr (\x xs -> if p x then x:xs else xs ) [] xs
wenn sie als ausgeführt werden:
filter' even [2,3,4,5,6]
ergibt [4,6] anstelle von [2,4,6]
Warum sollte dies der Fall sein? Und wie SOLLTE ich diese Funktionen definieren, um die erwarteten Ergebnisse zu erhalten? Ich nehme an, dass etwas mit meinen Lambda-Ausdrücken falsch ist...