Beispiel Call-by-name
In meinem Prinzipien der Programmierung der Klasse sprechen wir über die verschiedenen aufrufen von Methoden. Einige, die wir diskutiert haben, waren:
- call-by-value
- call-by-reference
- call-by-value/result
- und call-by-name
Ich kann nicht finden, ein Beispiel, wie call-by-name funktioniert. Wer Pflege zu geben Sie mir ein Beispiel? Ich denke, dass, wenn Sie eine xml-Datei als Eingabe dies ist ähnliche zu call-by-name. Könnte mir jemand eine mehr traditionelle Beispiel?
- Ich kenne keine modernen Beispiele von call-by-name. Es war eine sehr schlechte Idee, zurück in ALGOL 60, und ich bezweifle, dass hat sich geändert.
- Welche Art von Beispiel sind Sie auf der Suche nach? Ein Beispiel für eine Sprache, verwendet call-by-name-oder ein Beispiel der Auswertung eines Ausdrucks mittels call-by-name Aussehen würde?
- beides könnte nützlich sein. Ich bin mir nicht sicher, aber von dem was ich bisher herausgefunden habe wie es scheint, eine Recht tote Idee (korrigiert mich wenn ich falsch bin) aber es ist im Kurspreis enthalten material (vielleicht auch nur aus historischen Gründen?)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werde ich die Arbeit in einer hypothetischen Programmiersprache. Nehmen wir an wir haben eine Funktion
p(x)
druckt x und dann gibt es zurück. Nun definieren wir eine Funktion:Nun nennen wir es mit einigen Argumenten:
x
undy
gehen, um ersetzt werden, für die Parameter, so dass der Aufruffoo
oben ist, werde das Ergebnis in:Also gehen wir drucken 456 auf dem Bildschirm und Rückkehr 457. In einer anderen Bewertung Strategie, wir würden bewerten Sie die Parameter der Funktion ersten Druck (123 und 456 auf dem Bildschirm in den Prozess) und dann ersetzen 456 für
y
im Hauptteil der Funktion, schließlich der Rückkehr 457.Es ist konstruiert, aber ich hoffe, Sie bekommen die Idee. Es ist alles über die substitution.
int x = 0; foo(t(x)); print(x);
wenn es war auch "call-by-value" diese drucken würde 0. Wenn es war auch "call-by-reference" es könnte "drucken" etwas anderes.http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_name
Im call-by-value, bewerten Sie Argumente, abrufen von Werten, die dann an die Funktion übergeben.
foo(bar())
wird ausgewertet, wiearg = bar();
, dann foo(arg) aufgerufen wird, und im Körper die Funktion, das neu zugewiesene variable arg ist zugänglich, veränderbar, ...Im call-by-name, Sie kommt im Körper der Funktion, Verweise auf Argumente, die durch Ihre code während des Anrufs. Dann bewerten Sie den Körper, Sie bewerten die Argumente.
foo(bar())
mitfoo(arg) { return arg; }
bewertetfoo(arg) { return bar(); }
Call-by-name Arbeit als call-by-reference, wenn die tatsächlichen parameter werden scaler, aber anders sein, wenn die tatsächlichen parameter ist Ausdruck oder ein array dann ist der parameter re-evaluiert bei jedem Zugriff.
hier ist ein einfaches Beispiel