Shadowing und Nested-Funktion

7

Ich möchte verstehen, wie der Mechanismus der Shadowing- und Nested-Funktion funktioniert. Zum Beispiel:

%Vor%

Kann jemand erklären, was hier passiert?

    
Neo 19.03.2010, 14:37
quelle

2 Antworten

16

Ihr Code entspricht dem Folgenden, wo ich einfach Instanzen Ihrer Namen nummeriert habe, um Ihnen zu veranschaulichen, wie Shadowing auftritt.

%Vor%

Dies kann natürlich weiter vereinfacht werden. Da dup2 und z2 niemals verwendet werden, ist dup1 äquivalent zu let dup1 y2 = y2 und die gesamte Funktion entspricht

%Vor%

Dies entspricht

%Vor%

durch Substitution. Dies ist das Gleiche wie

%Vor%

Hilft das?

    
kvb 19.03.2010, 14:57
quelle
13

Ich denke, @kvb gibt eine sehr gute Erklärung, wie der Code bewertet wird. Der Code kombiniert verschachtelte Funktionen und Shadowing auf ziemlich verwirrende Weise :-). Ich denke, es ist nützlich, die beiden Konzepte getrennt zu betrachten.

Mit

Spiegeln können Sie einen Wert durch einen neuen Wert in der Deklaration let oder eine Wertbindung im Konstrukt match ausblenden. Dies bedeutet, dass Sie nicht mehr auf den ursprünglichen Wert zugreifen können. Hier ist ein einfacheres Beispiel:

%Vor%

Hier deklarieren wir eine Funktion, die ein Argument namens num verwendet. Nehmen wir an, wir nennen die Funktion mit 1 als Argument. In der zweiten Zeile deklarieren wir einen neuen Wert mit dem gleichen Namen - initialisiert auf 1 + 20 , also 21 . Die dritte Zeile deklariert erneut einen neuen Wert und initialisiert ihn zu 21 * 2 (weil das zuletzt deklarierte num Symbol mit dem Wert 21 ). In Zeile 4 greifen wir wieder auf das zuletzt deklarierte num Symbol zu und geben 42 zurück.

Dies ist vor allem nützlich, wenn Sie eine Berechnung haben, die einen neuen Wert berechnet, der von allen nachfolgenden Berechnungen verwendet werden soll. Shadowing ermöglicht es Ihnen, den vorherigen Wert zu verbergen, so dass keine Gefahr besteht, dass Sie versehentlich die ursprüngliche verwenden.

Verschachtelte Funktionen sind sehr nützlich, wenn Sie eine Berechnung des lokalen Nutzens durchführen müssen, die Parameter der äußeren Funktion verwendet. Zum Beispiel:

%Vor%

Hier deklarieren wir eine verschachtelte Funktionsfunktion timesUtil , die eine beliebige Zahl mit dem Wert x multipliziert (was das Argument der Funktion times ist). Dann können wir es später (in der letzten Zeile) verwenden, um die Operation auszuführen, ohne den x -Wert erneut als Argument übergeben zu müssen. Das Interessante an verschachtelten Funktionen ist, dass sie auf Werte zugreifen können, die von der äußeren Funktion deklariert wurden.

    
Tomas Petricek 19.03.2010 15:23
quelle

Tags und Links