Ho appena iniziato ad imparare Haskell e ho trovato una cosa strana.Perché map restituisce un elemento aggiuntivo quando si usano gli intervalli in Haskell?
Let abbiamo una lista:
ghci> [0,2..5]
[0,2,4]
Dispone di 3 elementi. Quando uso map
con questa lista ho 3 come elemento di uscita, ad esempio:
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]
Ma quando io uso la divisione frazionaria ottengo 4 elementi in lista di uscita:
ghci> map (/ 2) [0,2..5]
[0.0,1.0,2.0,3.0]
ghci> length (map (/ 2) [0,2..5])
4
Potrebbe spiegare perché map
potrebbe restituire più elementi di quanto lo fosse?
Grazie!
Correlato: http://stackoverflow.com/q/7290438/2541573 – Jubobs
Si noti che 'lunghezza (mappa f xs) == lunghezza (mappa f 'xs')' per ogni 'lunghezza xs == lunghezza xs'' . Questo * deve * essere vero indipendentemente dall'implementazione di 'map' poiché deriva dal suo tipo. 'map' non è in grado di distinguere tra diversi tipi e quindi decide quanti elementi restituire. – Bakuriu