2016-11-20 4 views
0

Map Funktionen funktioniert nicht auf dieser LinieKartenfunktion funktioniert nicht richtig?

compPic (a:as) = map (compL a) as

Es funktioniert nur auf einzelne Saite, aber nicht auf einer Liste der Zeichenfolge können Sie Fehler finden.

compL :: String -> String 
compL bs = [a | b <- bs, a <- 
       if (b == ' ') 
        then "X" 
       else if (b=='X') 
        then " " 
        else [b]] 


compPic :: [String] -> [String] 
compPic [] = [] 
compPic (a:as) = map (compL a) as 

Antwort

2

die bei der Definition von map in Prelude Werfen wir einen Blick:

map _ []  = [] 
map f (x:xs) = f x : map f xs 

Hier sehen wir, dass map definiert wird jeder Wert in einer Liste an die Funktion übergeben, die angewendet wird wird. Außerdem brauchen wir keinen Basisfall, da map die Rekursion behandelt. Daher sollten Sie umschreiben compPic wie:

compPic :: [String] -> [String] 
compPic as = map compL as 

Oder eta-reduziert:

compPic = map compL 
+0

Nun, Sie sehr technisch erklären. Danke @mnoronha. Du bist nett :) – Shahzad