Map-Funktion in Haskell
Soweit ich das verstanden habe anzeigen in Haskell nimmt eine Funktion und eine Liste und wendet die Funktion auf jedes element in dieser Liste, bevor Sie eine neue Liste zu erstellen, die die Funktion angewendet, um jedes Mitglied.
Ausprobieren, das funktioniert mit wirklich einfachen Funktionen wie (+5)
so es funktioniert gut, wenn ich Typ:
map (+7) [2,8,9,3]
Bekomme ich:
[9,15,16,10]
Aber das funktioniert nicht mit Funktionen, die ich erstellt habe. Sagen ich habe eine Funktion shiftLetter
deren Typ-Deklaration ist:
shiftLetter :: Char -> Int -> Char
(mit Int Verschiebung, wie weit Sie den Brief zurückgegeben wird)
Wenn ich eine neue Funktion, die es mit mehr als einem Buchstaben und Typ:
shiftLetters :: String -> Int -> Char
shiftLetters letters shift = map shiftLetters "AKHLKHN"
Bekomme ich Fehler, warum ist das so?
shiftLetters
und shiftAlphabet
, überprüfen Sie Sie erneutWas ist
shiftAlphabet
? So etwas wie shiftAlphabet char = shiftLetter char shift
könnte das sein, was du suchst?in der interpreter, diese Dinge zu tun und es herauszufinden auf Ihre eigenen:
:t map
, :t shiftLetter
.und auch
:t map shiftLetter "AKHLKHN"
ich meine."Bekomme ich Fehler, warum ist das?", weil es Fehler. Und ob Sie es glauben oder nicht, der text der Fehlermeldungen betrifft, ja, in der Tat. Wenn Sie nicht Lesen wollen, sollten Sie zumindest nach Ihnen.
InformationsquelleAutor Eddie | 2013-10-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie überprüfen Sie den Typ der
map
Funktion, dann sehen Sie:So benötigst du eine Funktion, die einen parameter, aber Sie nimmt zwei. Verwenden Sie
oder
Sinnlos Stil:
oder Sie tun können
(`shiftLetter` shift)
statt(flip shiftLetter $ shift)
Das Typ-system nicht verhindern, dass Sie die mapping-Funktionen von mehr als einer Variablen. (In der Tat, in der 'applicative' Stil, es ist sehr üblich.)
map shiftLetters
ist ein absolut korrekter Ausdruck, mit einer Art vonString -> [(Int -> Char)]
.Sie versuchen, diese bekomme ich: Syntax error on 'shiftLetter' Vielleicht haben Sie gedacht, um ein -XTemplateHaskell
Das Leerzeichen nach
$
ist wichtig.InformationsquelleAutor Hauleth
Sieht es aus wie Sie wollen
shiftLetter nimmt einen Char, nicht einen String. Beachten Sie, dass die Zeichenfolge ist das gleiche wie [Char], welche Verschieden von Char.
Ich weiß! Sorry, die Funktionen haben sehr ähnliche Namen. shiftLetter nimmt ein Char aber shiftLetters nimmt einen String?
InformationsquelleAutor Louis Wasserman