Visual Studioでデバッグ
昨日書いた評価器は、いまいちバグってるなー。静的スコープじゃなくて動的スコープになっているし、環境がグローバルの環境しかない。
デバッグでずいぶん時間を無駄にしました(そしてまだ解決していない)。
しかし、そのおかげで、Visual Studioのデバッグのノウハウが手に入りました。
funのbodyは別の行にしたほうがブレイクポイントを置きやすい
let add a b cont = cont (a + b) add 1 2 (fun x -> printfn "%A" x)
と書くのではなく
let add a b cont = cont (a + b) add 1 2 (fun x -> printfn "%A" x) (* この行にブレイクポイントを置ける *)
と書くといいわけです。
「ローカル」ビューにはシャドウイング前の値も表示されるけど、
let x = 100 (* A *) let add a b cont = cont (a + b) add 1 2 (fun x -> (* B *) let x = 10 (* C *) printfn "%A" x) (* この行にブレイクポイントを置く *)
最後の行にブレイクポイントを置いて止めたとき、ローカル」ビューにはシャドウイング前のx(行B)と後のx(行C)の値が表示されますが、エディタ上のシャドウイング前のx(行B)にカーソルを当てたときはシャドウイング後の値(行C)が表示されます。関数の外のx(行A)にカーソルを当てたときも最後のx(行C)の値が表示されます。これは、ちょっと直感的でないなぁ。