Brauche Hilfe beim Verständnis von Lambda (Currying)

7

Ich lese Accelerated C # Ich verstehe den folgenden Code nicht wirklich:

%Vor%

in der letzten Zeile, worauf bezieht sich x? und da ist noch eins:

%Vor%

Wie bewerte ich das? (y) => (x) => func( x, y ) was passiert wo ... verwirrend.

    
Jiew Meng 02.09.2010, 05:05
quelle

4 Antworten

19

Lassen Sie uns zuerst den Code vereinfachen:

%Vor%

Dies ist genau das gleiche wie:

%Vor%

Jetzt ist klar, worauf sich x bezieht? x ist der Parameter für die Funktion "Magic".

Jetzt können Sie B wie folgt verwenden:

%Vor%

Sinn machen? Siehst du, was hier passiert? Wir nehmen eine Funktion von zwei Parametern und "fixieren" einen der Parameter zu einer Konstante. Es wird also eine Funktion eines Parameters.

Das zweite Beispiel geht noch einen Schritt weiter. Nochmals, vereinfachen Sie die Gruft loszuwerden, damit Sie es leichter verstehen können:

%Vor%

Dies ist das Gleiche wie

%Vor%

Also sagst du

%Vor%

B ist ein Parameterfixierer. B2 macht einen Parameterfixierer für Sie .

Dies ist jedoch nicht der Punkt von B2. Der Punkt von B2 ist der:

%Vor%

liefert das gleiche Ergebnis wie

%Vor%

B2 wandelt eine Funktion von zwei Parametern in zwei Funktionen mit jeweils einem Parameter um .

Macht Sinn?

    
Eric Lippert 02.09.2010, 05:25
quelle
1

x ist der Parameter des Lambda, er ist vom Typ TArg1.

Es kann hilfreich sein, das = & gt; als "maps to" wie in "x mappt eine neue Funktion mit einer Konstante des Typs TArg2, die in den ursprünglichen Funktionsdelegaten, func, eingesetzt wird."

    
marr75 02.09.2010 05:07
quelle
1

Die Variable x ist eine nicht gebundene Variable. Dies stellt ein Argument für die zurückgegebene Funktion vom Aufruf von Bind2nd dar.

Ein paar Stunden mit Scheme würden Ihnen hier helfen, aber versuchen Sie das.

Wenn Sie Bind2nd aufrufen, ist das zurückgegebene Ergebnis eine Funktion. Diese Funktion ist als

definiert %Vor%

Nun, da Sie die obige Variable einer Variablen zugewiesen haben, sagen wir lambda , können Sie diese Funktion über die lambda Variable

aufrufen %Vor%

Das in x definierte Bind2nd ist nur eine Variable, die ein Argument für die Funktion darstellt, die an Sie zurückgegeben wird.

    
linuxuser27 02.09.2010 05:09
quelle
1

Ein Lambda-Ausdruck ist eine Abkürzung für eine anonyme Methode. Wie die anonyme Methode wird der Lambda-Ausdruck den Delegattypen zugewiesen. Alle Bedingungen, die für anonyme Methoden gelten, gelten auch für Lambda-Ausdrücke.

= & gt; heißt Lambda-Operator, der als "goes to" gelesen wird. Die linke Seite des Operators gibt die durch Komma getrennten Eingabeparameter an, und die rechte Seite gibt einen Ausdrucks- oder Anweisungsblock an, der als Lambda-Text bezeichnet wird. (p1, p2, p3, ... pN) = & gt; Ausdruck Wenn Sie nur einen Parameter haben, können Sie die Klammer überspringen p1 = & gt; Ausdruck;

Ich habe einen kleinen Blog geschrieben, der Lambda-Ausdruck hier erklärt Lambda-Ausdruck

>     
mujahidkhaleel 02.09.2010 05:21
quelle

Tags und Links