Ich habe gerade angefangen, Haskell zu lernen und eine seltsame Sache gefunden.Warum gibt map ein zusätzliches Element zurück, wenn Bereiche in Haskell verwendet werden?
Let haben wir eine Liste:
ghci> [0,2..5]
[0,2,4]
Es hat 3 Elemente. Als ich map
mit dieser Liste verwenden bekomme ich 3 Element als Ausgang, zum Beispiel:
ghci> map (+ 1) [0,2..5]
[1,3,5]
ghci> map (* 2) [0,2..5]
[0,4,8]
ghci> map (`div` 2) [0,2..5]
[0,1,2]
Aber wenn ich Bruchteilungs verwenden bekomme ich 4 Elemente in Ausgabeliste:
ghci> map (/ 2) [0,2..5]
[0.0,1.0,2.0,3.0]
ghci> length (map (/ 2) [0,2..5])
4
Könnten Sie bitte erklären, warum map
kann mehr Elemente zurückgeben, als es war?
Vielen Dank!
Verbunden: http://Stackoverflow.com/q/7290438/2541573 – Jubobs
Beachten Sie, dass 'Länge (Karte f xs) == Länge (Karte f 'xs')' für jede 'Länge xs == Länge xs'' . Dies muss unabhängig von der Implementierung von map sein, da es von seinem Typ abgeleitet ist. 'map' kann nicht zwischen verschiedenen Typen unterscheiden und entscheidet daher, wie viele Elemente zurückgegeben werden sollen. – Bakuriu