From: Shugo Maeda Date: 2001-10-31T16:16:03+09:00 Subject: [ruby-list:32138] Re: call by name 前田です。 At Wed, 31 Oct 2001 15:21:33 +0900, Shugo Maeda wrote: > > > call by referenceとcall by nameはまた違いますよね。 > > > Cでcall by nameに相当するのはマクロなんじゃないかと思います。 > > > # 詳しくは久野先生の「言語プロセッサ」をどうぞ:-) > > > > マクロのようなのを call by name と呼ぶことに異存はありませんが、 > > Haskell みたいな lazy evaluation を call by name と呼ぶ流儀もあります。 > > Haskellはぜんぜん知らないのですが、Algolのcall by nameみたいなも > のでしょうか。 Webで調べたのですが、 http://www.is.titech.ac.jp/~kando9/kuno_zemi/ModernCompilerImplementation/15_Functional/15_FunctionalProgramingLanguage.html (む、久野先生のゼミみたいですね。) を見ると、 ・call by nameの変種(?)にcall by needというものがある。 ・call by needの方は、同じサンクが二度呼び出された場合、二度目は実 際に計算を行う代りに前の計算結果を返す。 ・lazy evaluationはcall by needのことである。 のように読めますけど、この理解は正しいでしょうか? それで、田中さんがおっしゃる流儀というのは、 ・Cのマクロみたいに展開してしまう流儀 ・引数の参照を、サンクの呼び出しに変換する流儀 の二つのことでしょうか? -- 前田 修吾