Haskell - Merge-Sort, Sortieren von Wörtern und zahlen
Habe ich geschrieben, merge-sort in Haskell, es funktioniert, wenn mit zahlen, aber nicht mit Worten, und ich dachte, es würde. Ich bekomme nur "not in scope" bei der Verwendung von Worten und Buchstaben. Was mache ich falsch?
Hier ist mein code:
merge :: Ord a => [a] -> [a] -> [a]
merge [] ys = ys
merge xs [] = xs
merge (x:xs) (y:ys)
| x <= y = x : merge xs (y:ys)
| otherwise = y : merge (x:xs) ys
mergeSort :: Ord a => [a] -> [a]
mergeSort [] = []
mergeSort [x] = [x]
mergeSort xs
= merge (mergeSort top) (mergeSort bottom)
where
(top, bottom) = splitAt (length xs `div` 2) xs
- Dies funktioniert mit Strings, f.e.
mergeSort ["banana", "candy", "apple"]
- Dein code sieht okay aus. Es könnte hilfreich sein, um zu sehen, die genaue Eingabe und die vollständige Fehlermeldung. Ist es nicht gerade hilfreich, dass etwas ist nicht im Lieferumfang...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie mit der Eingabe Ihrer Worte so?
Die syntax ist nicht korrekt. Wenn Sie möchten, um die Eingabe einer Zeichenkette, die Sie haben, um encapsulte es in doppelte Anführungszeichen (
"
):Wenn das ist nicht Ihr Fehler, fühlen Sie sich frei, dies zu ignorieren beantworten.
Dein code funktioniert einwandfrei.
Allerdings würde ich vorschlagen, teilen Sie die Liste in einem Durchgang, ohne
length
. Natürlich, die Reihenfolge ist nicht wichtig hier, nur, dass wir zwei Listen von etwa der gleichen Größe. Sie könnten es genau so machen:... oder tail-rekursive ...
... oder mit Indizes ...
... oder mit einem Fach ...