私のプログラミングクラスの原則では、さまざまな呼び出し方法について話しています。私たちが話し合ったのは次のとおりです。
- 値による呼び出し
- 参照による呼び出し
- 値/結果による呼び出し
- そして名前で呼ぶ
名前による呼び出しがどのように機能するかの例が見つかりません。例を挙げてくれる人はいますか?入力として xml ファイルを使用する場合、これは名前による呼び出しに似ていると思います。誰かが私にもっと伝統的な例を教えてもらえますか?
私のプログラミングクラスの原則では、さまざまな呼び出し方法について話しています。私たちが話し合ったのは次のとおりです。
名前による呼び出しがどのように機能するかの例が見つかりません。例を挙げてくれる人はいますか?入力として xml ファイルを使用する場合、これは名前による呼び出しに似ていると思います。誰かが私にもっと伝統的な例を教えてもらえますか?
架空のプログラミング言語で作業します。p(x)
x を出力して返す関数があるとします。関数を定義しましょう。
function foo(x, y) { return y+1; }
いくつかの引数を指定して呼び出してみましょう。
foo(p(123),p(456))
x
y
パラメータの代わりに使用されるため、上記の呼び出しの結果foo
は次のようになります。
return p(456)+1;
したがって、456 を画面に出力して 457 を返します。別の評価戦略では、最初に関数パラメーターを評価し (プロセスで 123 と 456 を画面に出力)、次にy
関数本体で456 を置き換えます。 457 を返します。
勝手ではありますが、ご理解いただければ幸いです。それはすべて置換についてです。
http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_name
値による呼び出しでは、引数を評価し、関数に渡される値を取得します。
foo(bar())
として評価されarg = bar();
、次に foo(arg) が呼び出され、関数の本体で、この新しく割り当てられた arg 変数がアクセス可能になり、変更可能になります...
名前による呼び出しでは、呼び出し中に使用されるコードによって、関数の本体で引数への参照を置き換えます。次に、本体を評価して、引数を評価します。
として評価されfoo(bar())
ますfoo(arg) { return arg; }
foo(arg) { return bar(); }
名前による呼び出しは、実際のパラメーターがscalerの場合は参照による呼び出しとして機能しますが、実際のパラメーターが式または配列の場合は異なり、実際のパラメーターはアクセスごとに再評価されます。
ここに簡単な例があります
begin
integer n;
procedure p(k: integer);
begin
print(k);
n := n+1;
print(k);
end;
n := 0;
p(n+10);
end;