Ich versuche Insertion Sortierung in Haskell für meine wöchentliche Universität Aufgabe zu implementieren. Das ist mein Einsatz und Sortierfunktion:Insertionsort in Haskell mit der angegebenen Reihenfolge
insert :: (Ord a) => a -> [a] -> [a]
insert a [] = [a]
insert a (a':as)
| a <= a' = a:a':as
| otherwise = a':insert a as
insertionSort :: (Ord a) => [a] -> [a]
insertionSort [] = []
insertionSort (a:as) = insert a (insertionSort as)
Das funktioniert aber mein Lehrer angegeben die Signatur wie folgt:
insert :: (a -> a -> Bool) -> a -> [a] -> [a]
insertionSort :: (a -> a -> Bool) -> [a] -> [a]
Alles, was ich versucht inzwischen gescheitert und die Compiler-Fehler sind auch nicht wirklich hilfreich. Hoffe ihr könnt mir dabei helfen!
Edit:
Das gegebene Beispiel von meinem Tutor sieht so aus:
Main> insert (<) 3 [1,2,5,7,9]
[1,2,3,5,7,9]
Main> insSort (>) [7,9,1,2,5]
[9,7,5,2,1]
Vielen Dank! Ich habe gelesen, dass (Ord a), (>) und (a-> a-> Bool) alle gleichwertig sind. Ist das korrekt? Und wenn ja, warum brauchst du (insert :: (Ord a) => (a-> a-> Bool) -> a ...) anstelle von (insert :: (a-> a-> Bool) - > a ...)? – GabbaGandalf
@GabbaGandalf Keine von ihnen ist gleichwertig. '(Ord a) => ...' besagt, dass a ein bestellbarer Datentyp sein muss. '(>)' ist eine Funktion. Es ist dasselbe wie das Schreiben von '(\ a b -> a> b)'. Schließlich ist '(a -> a -> Bool)' eine Typbeschreibung: Sie beschreibt eine Funktion, die 2 Werte vom Typ 'a' akzeptiert und einen 'Bool' zurückgibt. –
Danke, gut zu wissen. Die Anweisung (Ord a) => ... verhindert also nur Laufzeitfehler? – GabbaGandalf