Wie kombiniert man die Buchstaben von zwei strings in haskell
Ich Lerne Haskell und nach dem guide auf http://learnyouahaskell.com/starting-out. Ich bin an dem Punkt, wo es gezeigt:
ghci> let nouns = ["hobo","frog","pope"]
ghci> let adjectives = ["lazy","grouchy","scheming"]
ghci> [adjective ++ " " ++ noun | adjective <- adjectives, noun <- nouns]
["lazy hobo","lazy frog","lazy pope","grouchy hobo","grouchy frog",
"grouchy pope","scheming hobo","scheming frog","scheming pope"]
Was möchte ich erreichen, es ist etwas ähnliches, aber die Kombination der Buchstaben enthalten in beiden strings, und da die strings sind im wesentlichen Listen von char in Haskell, das ist, was ich versucht habe:
[x ++ ' ' ++ y | x <- "ab", y <- "cd"]
Aber der compiler beschwert sich:
Prelude> [y ++ ' ' ++ y | x <- "abd", y <- "bcd"]
<interactive>:50:2:
Couldn't match expected type ‘[a]’ with actual type ‘Char’
Relevant bindings include it :: [[a]] (bound at <interactive>:50:1)
In the first argument of ‘(++)’, namely ‘y’
In the expression: y ++ ' ' ++ y
<interactive>:50:7:
Couldn't match expected type ‘[a]’ with actual type ‘Char’
Relevant bindings include it :: [[a]] (bound at <interactive>:50:1)
In the first argument of ‘(++)’, namely ‘' '’
In the second argument of ‘(++)’, namely ‘' ' ++ y’
In the expression: y ++ ' ' ++ y
<interactive>:50:14:
Couldn't match expected type ‘[a]’ with actual type ‘Char’
Relevant bindings include it :: [[a]] (bound at <interactive>:50:1)
In the second argument of ‘(++)’, namely ‘y’
In the second argument of ‘(++)’, namely ‘' ' ++ y’
Habe ich eine Reihe von versuchen, wie das einwickeln der Ausdruck in Klammern ein, um eine Liste, so verändert sich der Raum, der einen String anstatt einer char... Wie bekomme ich es funktioniert?
Dank
InformationsquelleAutor Mimo | 2015-02-14
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
++
funktioniert nur für die Listen, aberx
undy
sind nurChar
. Nachdem alle, Sie sind Elemente aus einemString
(=[Char]
), in der Erwägung, dass die LYAH Beispiel hatte Listen von Listen vonChar
:[String] = [[Char]]
:Verwenden Sie stattdessen
(:)
auf cons die Charaktere auf einander und auf die leere Liste:Das eigentliche problem hier ist, das Sie versuchen, zu verketten von drei Zeichen, mit dem eine Funktion definiert, die nur für Liste der Elemente.
++
tatsächlich verketten von zwei Listen, nicht als zwei einzelne Elemente und geben eine Liste.So, kann man Ihr Programm, entweder durch die Umwandlung aller Zeichen in Zeichenketten um, wie dies
Hinweis: die
" "
, nicht' '
. Da" "
bedeutet, dass ein string nur Leerzeichen, sondern' '
bedeutet nur das Leerzeichen.Oder konvertieren
y
eine Zeichenfolge, verwenden Siecons
Betreiber mit der' '
, und verketten es zux
in einen string umgewandelt, wie diesOder, noch einfacher und intutive, vorgeschlagen von chi, erstellen Sie eine Liste von Zeichen, wie diese
Hinweis: Wickeln Sie ein Zeichen mit
[]
macht es eine Liste von Zeichen mit nur einem Charakter in ihm. Im Grunde wird ein String.[x,' ',y]
optisch nett hier.