2012-12-27 15 views
5

Quindi, andiamo al punto:Haskell - Lista di comprensione in una lista di tuple (a, [a])

f :: Eq a => a -> [(a,[a])] -> [(a,[a])] 
f x list = [(a,[m]) | (a,[m]) <- list, x == a] 

così:

f 1 [(1,[1])] = [(1,[1])] 

ma

f 1 [(1,[1,1])] = [] 

Perché è quello ?? Grazie!

(io sono un novizio, quindi mi scuso se è una domanda troppo stupido, ma davvero non riesco a trovare una spiegazione)

risposta

9

Questo perché [1,1] non corrisponde al modello [m]. Quest'ultimo significa una lista di un oggetto (a meno che non sia usato dove dovrebbe essere il nome di un tipo). Haskell sa già che il secondo elemento della coppia è una lista (osservando il tipo di parametro list) e non è necessario dirlo esplicitamente.

+0

Ho appena avuto un momento strabiliante ora! haha. Esattamente, la [m] significa una lista di un elemento, ora capisco. Grazie mille! = D – dehq

Problemi correlati