2014年12月4日木曜日

式と値

式と値(特に関数値)の違いについて急に分かった気がする。

評価のタイミングや回数がどうなるかを色々考えている時にピンと来た。

式を評価すると値を返す
変数参照も式であり評価すると格納している値を返す
関数適用も式であり評価するとbodyの評価結果返された値を返す
定数も式であり評価すると定数値を返す

値そのものは評価出来ない
operandとしての機能しかない
opecodeと組み合わせないと評価できない => 式

関数値は関数適用と言う式を構成できる

(let ([x e]) (f x x))
eは一回しか評価されない
eが関数値を戻しても、xに対する変数参照が評価されるだけ
関数適用にはならない

thunk,stream,generatorの様に引数が無い関数値だと混乱しやすいので注意
変数参照なのか関数適用なのか

0 件のコメント:

コメントを投稿