Ich übe einige Haskell Prüfung Papier Fragen und haben über die folgendenHaskell - Weben Sie zwei Listen in Blöcken der Größe n zusammen?
definieren eine Haskell-Funktion weaveHunks kommen, die einen int und zwei Listen nimmt und webt sie zusammen in große Stücke der angegebenen Größe. Achten Sie darauf, seine Typ-Signatur zu deklarieren.
Beispiel:
weaveHunks 3 "abcdefghijklmno" "ABCDEFGHIJKLMNO"
=> "abcABCdefDEFghiGHIjklJKLmnoMNO"
ich folgend auf Stack-Überlauf gefunden habe, die einfach zu zwei Listen verweben, sondern nur in Stücke von 1
weaveHunks :: [a] -> [a] -> [a]
weaveHunks xs [] = xs
weaveHunks [] ys = ys
weaveHunks (x:xs) (y:ys) = x : y : weaveHunks xs ys
ich Probleme habe Anpassung dieser Stücke fo n Größe zu nehmen, bin ich sehr neu in Haskell aber thi s ist das, was ich bisher
weaveHunks :: Int -> [a] -> [a] -> [a]
weaveHunks n xs [] = xs
weaveHunks n [] ys = ys
weaveHunks n xs ys = (take n xs) : (take n ys) : weaveHunks n (drop n xs) (drop n ys)
Ich erhalte einen Fehler in der letzten Zeile
(Typ konnte nicht übereinstimmen
a' with
[a] ')
Ist (drop n xs)
nicht eine Liste?
Die Art von 'weaveHunks' sagt, dass es ein' [a] 'produziert. Wenn Sie die Typensignatur weglassen und diese in ghci laden, was sagt Ihnen dann der Typ? – dfeuer
Ich entfernte die Typ-Signatur und: t gab mir 'webenHunks :: p -> [a] -> [a] -> [a]' –
Oh, Entschuldigung, ich habe etwas verpasst; Sie müssen die ersten beiden Zeilen löschen, um diese Art von Informationen zu erhalten. Wie auch immer, du hast deine Antwort bekommen. – dfeuer