Ich werde nicht einfach direkt die Antwort schreiben, weil dies wie eine Aufgabe/Hausaufgabe irgendeiner Art scheint. Also werde ich nur ein bisschen erklären, wie Lambdas funktionieren.
Werfen wir einen Grund Lambda nehmen und es brechen: \a b -> a
Auf der linken Seite des Pfeils (in diesem Fall ein b) wir die Argumente haben. Dies ist, was an das Lambda weitergegeben wird.
Auf der rechten Seite des Pfeils haben wir den Ausgang (in diesem Fall a). Was dieses Lambda macht, nimmt zwei Werte und gibt Ihnen den ersten.
könnte Der Ausgang jeder Ausdruck zum Beispiel, wenn wir Zahlen beschränken dann a und b werden wir myLambda = \a b -> a + b
so myLambda 1 2
ausgeben würde, 3.
So konvertieren Sie Ihre Definitionen in lambdas nur nehmen Sie Ihre if then else
Abschluss haben könnte und haben diese als der Ausdruck nach dem Pfeil im Lambda.
Sie können auch den Mustervergleich verwenden, der in den ursprünglichen Definitionen verwendet wurde, und den Wert in ein Lambda mit einer case of
-Anweisung umwandeln. Dies nimmt einen Wert zwischen case
und of
und dann stellen Sie verschiedene auszugebende Ausdrücke bereit, abhängig davon, welcher Wert z.
case a of
True -> something1
False -> something2
Damit würde in einem Lambda setzen geben Sie:
\a b -> case a of
value1 -> something1
value2 -> something2
Aus Gründen der Vollständigkeit werde ich erwähnen, dass es eine Erweiterung LambdaCase Sprache ist, die Sie zu vereinfachen erlaubt:
\a -> case a of
value1 -> something1
value2 -> something2
zu
\case
value1 -> something1
value2 -> something2
Aber das ist nicht nötig und ich würde mir als Anfänger sicher keine Sorgen machen.
Ich hoffe, das hilft, fühlen sich frei, zur Klärung fragen :)
Was meinst du mit „Lambda-Ausdruck“? – melpomene
Wir haben dies als ein Beispiel gegeben: addiere x y = x + y und es ist add = \ x -> (\ y -> x + y) als ein Lambda-Ausdruck –