Beispiel für einen Anruf nach Name

8

In meinen Prinzipien der Programmierklasse sprechen wir über verschiedene Aufrufmethoden. Einige diskutierten wir:

  • Aufruf nach Wert
  • Aufruf als Referenz
  • Aufruf nach Wert / Ergebnis
  • und nach Namen anrufen

Ich kann kein Beispiel dafür finden, wie call by name funktioniert. Möchte mir jemand ein Beispiel geben? Ich denke, wenn Sie eine XML-Datei als Eingabe verwenden, ist ähnlich , um nach Namen zu rufen. Könnte mir jemand ein traditionelleres Beispiel geben?

    
sixtyfootersdude 25.07.2010, 21:43
quelle

3 Antworten

9

Ich werde in einer hypothetischen Programmiersprache arbeiten. Nehmen wir an, wir haben eine Funktion p(x) , die x ausgibt und dann zurückgibt. Jetzt definieren wir eine Funktion:

%Vor%

Nun wollen wir es mit einigen Argumenten aufrufen:

%Vor%

x und y werden für die Parameter ersetzt, so dass der Aufruf von foo oben zu folgendem führt:

%Vor%

Wir drucken also 456 auf den Bildschirm und geben 457 zurück. In einer anderen Auswertungsstrategie würden wir zuerst die Funktionsparameter auswerten (Drucken von 123 und 456 auf den Bildschirm im Prozess) und dann 456 für y ersetzen. im Funktionskörper, der schließlich 457 zurückgibt.

Es ist erfunden, aber ich hoffe, Sie bekommen die Idee. Es geht um Substitution.

    
Gian 25.07.2010, 21:56
quelle
2

Ссылка

Bei Aufruf nach Wert werten Sie Argumente aus und rufen Werte ab, die dann an die Funktion übergeben werden. foo(bar()) wird als arg = bar(); ausgewertet, dann wird foo (arg) aufgerufen, und im Rumpf der Funktion ist diese neu zugeordnete arg-Variable zugänglich, modifizierbar, ...

Beim Aufruf nach Name ersetzen Sie im Körper der Funktion alle Referenzen auf Argumente durch ihren Code , die während des Aufrufs verwendet wurden. Dann wertet man den Körper aus und bewertet die Argumente. foo(bar()) mit foo(arg) { return arg; } wird als foo(arg) { return bar(); }

ausgewertet     
Scharron 25.07.2010 21:57
quelle
1

Aufruf nach Name funktioniert als Aufruf über Referenz , wenn der aktuelle Parameter Skalierer ist, aber unterschiedlich, wenn der aktuelle Parameter Ausdruck oder ist Array Dann wird der tatsächliche Parameter bei jedem Zugriff neu ausgewertet.

Hier ist ein einfaches Beispiel

%Vor%
  • Aufruf nach Wert output = & gt; 10 10
  • Aufruf nach Name output = & gt; 10 11
Abdo 15.05.2013 11:40
quelle

Tags und Links