diff --git a/content/多段階計算を命令型VMインストラクションで表現する.md b/content/多段階計算を命令型VMインストラクションで表現する.md index d7931993..942ccf56 100644 --- a/content/多段階計算を命令型VMインストラクションで表現する.md +++ b/content/多段階計算を命令型VMインストラクションで表現する.md @@ -30,27 +30,34 @@ let addc x y = &(~x + ~y) in ~(addc &n &m ) ``` -`addc`の型は`&int -> &int` +`addc`の型は`(&int,&int) -> &int` CodeもEscapeもネストできる構造なんだから命令型に直すとなにかしらのスタック構造を操作するものになるはず Escapeはあくまで埋め込むだけで評価をするわけじゃないんだよな `&(~x + ~y)`ここだけ取り出すとどうだろう +`~x`はxを評価した後にエスケープする、ってことだもんなあ + ``` fn addc x y // reg 1,2にはプログラム辺のインデックス +startescape mov 1 x +endescape +startescape mov 2 y +endescape add 1 1 2 //最後は必ずこうなるわけで fn main movc 1 100 movc 2 200 -lift 1 1 -lift 2 2 +lift 2 1 +lift 3 2 startescape -call "addc" 1 2 +move 1 "addc" +call 1 2 1 endescape ret 1 ```