Aufgabe 11.7 Lambda und Curry

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.

Aufgabe 11.7 Lambda und Curry
Hab schon bisi rumprobiert aber bei der aufgabe komm ich auf keinen grünen Zweig. Ich denke nicht, dass das sonderlich schwer ist, aber mir fehlt da irgendein “Trick” wie ich mit beliebigen Funktionen umgehe.

z.b. die mit dem Spiegeln der Funktion an der x-Achse:

spiegelX :: Num a => (a → a) → (a → a)
spiegelX f = f * (-1)

geht natürlich nicht. Hat da jemand Lösungsvorschläge oder Ideen (auch zu den andern 3 Progrämmchen dieser Teilaufgabe)?


Gibt mehrere Moeglichkeiten. Im einfachsten Fall kannst du dir die Funktion mit dem Argument anpassen. Ich nehm mal nicht dein Beispiel um keine Musterloesung zu liefern, aber die Uebertragung ist einfach. Beispiel ist einfach ne Funktion p5, die dir eine Funktion die du reinschiebst um 5 nach links verschiebt auf der x-Achse:

Die erste Moeglichkeit ist Funktionskomposition mit dem Kompositionsoperator ‘.’. D.h. du baust eine neue Funktion aus 2 vorher bekannten, das ist auch das, wonach dein Versuch oben aussieht:

p5 :: Num a => (a->a) -> (a->a)
p5 f = f . (+ 5)

Weil dabei das Argument der Funktion f bzw. +5 nie vorkommt nennt man das auch ‘fixpunktfrei’.

Die andere Moeglichkeit ist mit einem Lambda-Operator. Dabei kommt dann das Argument explizit vor:

p5 f = (\ x -> f (x + 5))

Achja, und zur Uebung und zum Verstaendnis: “Definieren Sie den Funktionskompositionsoperator mithilfe von lambda”


Danke das hilft mir sehr!

Edit: Super. Hab damit alle Aufgaben Lösen können. Deine Zusatzaufgabe müsste so gehen:

ausdruck f g = (\ x → f (g x))


brav :slight_smile: