Ich muss Funktionsordnung überladen. Das Argument der Funktion ist eine Zahl und sie müssen nach ihrem Wert für das Argument
0
geordnet werden. Das ist, was ich versucht:Haskell-Funktion überladenPrelude>instance (Num a, Ord b) => Ord (a -> b) where f > g = f 0 > g 0
aber es erzeugt den Fehler
Could not deduce (Eq (a -> b)) arising from the superclasses of an instance declaration from the context (Num a, Ord b) bound by the instance declaration at <interactive>:117:10-39 In the instance declaration for `Ord (a -> b)'
ich auch die Ord Klasse für Listen instanziiert möchten. Die Reihenfolge der Listen wird durch den Vergleich zwischen dem ersten Element jeder Liste bestimmt. Zum Beispiel [1,2] < [2,3], weil 1 < 2.
instance Ord a => Ord [a] where (h1:_) <= (h2:_) = h1 <= h2
Dies erzeugt auch den nächsten Fehler:
Ambiguous occurrence `<=' It could refer to either `Main.<=', defined at C:\Users\user-name\Desktop\test.hs:2:8 or `Prelude.<=', imported from `Prelude' at C:\Users\user-name\Desktop\test.hs:1:1 (and originally defined in `GHC.Classes')
Ich glaube, ich kann nicht sehr verstanden haben gut die Funktion Überladung in Haskell. Vielleicht könnte mir jemand erklären, was ich falsch mache.
Definieren Sie Ihr eigenes '<='?Prelude kommt bereits mit einem '<=', also sollten Sie wählen, welches Sie wollen (das ist, was die zweite Fehlermeldung sagt). Der erste Fehler besagt, dass es keine integrierte Definition für die Gleichheit zwischen Funktionen gibt. Außerdem hat Haskell kein Funktionsüberladen. – pdexter
Ihre Reihenfolge für die Liste wird sehr seltsam sein, denn dann "[1,1] <= [1,2]' und '[1,2] <= [1,1]' aber natürlich "[1,1]/= [1,2] '- auch du kannst keine leeren Listen vergleichen ... warum würdest du das tun? – Carsten
Der Zweck der Übung ist es, das Prinzip zu verstehen, etwas nicht zu tun, das "Sinn macht". – zaig