2012-12-27 14 views
5

Więc chodźmy do punktu:Haskell - rozumienie Lista na liście krotek (a, [a])

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

tak:

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

ale

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

Dlaczego tak jest? Dziękujemy!

(jestem nowicjuszem, więc przepraszam, jeśli to zbyt głupie pytanie, ale naprawdę nie mogę znaleźć wyjaśnienie)

Odpowiedz

9

To dlatego [1,1] nie pasuje do wzorca [m]. Ta ostatnia oznacza listę jednego elementu (chyba, że ​​jest używany, gdy nazwa typu powinna być). Haskell już wie, że drugim elementem pary jest lista (patrząc na typ parametru list) i nie trzeba tego wyraźnie mówić.

+0

Właśnie miałem chwilę oszałamiającą chwilę! ha ha. Dokładnie, [m] oznacza listę jednego elementu, teraz je otrzymuję. Dziękuję Ci bardzo! = D – dehq

Powiązane problemy