Haskell, Übergabe mehrerer Parameter

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Haskell, Übergabe mehrerer Parameter
Da wird ja offiziell noch kein Currying können ist sowas in Ordnung? Finde ich persönlich auch schöner

primList :: (Int,Int) -> [Int]

quadGleichung :: (Float, Float, Float) -> [Float]

Ja, ist auch die einzige Moeglichkeit das sauber ohne Currying zu machen.

Theoretisch[tm] koennte man noch eine Liste uebergeben, also sowas ala quadGleichung :: [Float] → [Float], das waere aber extremer Pfusch, weil man dann so ekelhafte Dinge tun muesste wie manuell die Laenge der Parameterliste pruefen. Oder man koennte einen Record benutzen, also einen zusammengesetzten Datentyp mit benannten Elementen. Aber wenn noch kein Currying dran war hattet ihr auch garantiert noch keinen Record gesehen.

Achja. Und es gibt noch die praktischen Funktionen ‘curry’ und ‘uncurry’, die wandeln die eine in die andere Syntax um:

Prelude> :t curry
curry :: ((a, b) -> c) -> a -> b -> c
Prelude> :t uncurry
uncurry :: (a -> b -> c) -> (a, b) -> c

Edit: Also eigentlich wandeln die nicht die Syntax um sondern sind Funktionen hoeherer Ordnung die die Funktionen transformieren indem sie die Datentypen der Parameter umfummeln. Aber das wird euch vermutlich auch erstmal egal sein und kommt garantiert spaeter dran.


Also euch ist frei gestellt, ob ihr das mit oder ohne Currying macht, da bei den beiden Aufgaben keine Signatur angegeben ist.
Bei Switch sieht das anders aus :wink:

Currying kommt übrigens in der Vorlesung vor dem Abgabetermin dran :wink: