名前呼び
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/18 09:18 UTC 版)
Simula は名前呼び(call by name、評価戦略を参照)をサポートしているため Jensen's Device(en:Jensen's Device)を容易に実装できる。デフォルトはALGOLと異なり値呼び(call by value)であるため、Jensen's Deviceを実装する際には、名前呼びであることを明示する必要がある。 単純な例として総和関数 ∑ {\displaystyle \sum } の実装例を以下に示す。 Real Procedure Sigma (l, m, n, u) ; Name l, u ; Integer l, m, n ; Real u ; Begin Real s ; l:= m ; While l <= n Do Begin s := s + u ; l := l + 1 ; End ; Sigma := s ; End ; 上記のコードは値(l)と式(u)を制御するために名前呼びを用いている。これにより式で使用する値を制御できる。Simula の標準規格は for 文にある種の制約があるため上記の例では while 文を使用している。 以下の式は次のように実装できる。 Z = ∑ i = 1 100 1 ( i + a ) 2 {\displaystyle Z=\sum _{i=1}^{100}{1 \over (i+a)^{2}}} Z:= Sigma (i, 1, 100, 1 / (i + a) ** 2) ;
※この「名前呼び」の解説は、「Simula」の解説の一部です。
「名前呼び」を含む「Simula」の記事については、「Simula」の概要を参照ください。
名前呼び
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/10/03 01:23 UTC 版)
名前呼び(call by name、名前渡し: pass by name)では、関数の引数は全く評価されず、捕獲回避置換(Capture-Avoiding Substitution)を使って関数本体内に直接置換される。引数がその関数の評価で使われていない場合、その引数は全く評価されない。引数が複数回使われている場合、その度に再評価される。 値呼びはその引数が全く使われていなくとも必ず評価するため、名前呼びの方が好ましいとする考え方もある。しかし、引数が使われている場合は名前呼びの方が性能が悪いという批判もある。 名前呼びはそのまま実装されることは滅多に無い。実際の言語では、名前呼びの意味論は次の必要呼び評価の実装となっていることが多い。ALGOL 60 ではデフォルトの評価戦略が名前呼びである。 副作用のある言語における名前呼びには微妙なところがあり、Jensen's Device のような例が知られている。
※この「名前呼び」の解説は、「評価戦略」の解説の一部です。
「名前呼び」を含む「評価戦略」の記事については、「評価戦略」の概要を参照ください。
- 名前・呼びのページへのリンク