2015年1月9日金曜日

開発環境

コンピュータプログラミングの概念・技法・モデル(IT Architect' Archiveクラシックモダン・コンピューティング6) (IT Architects’Archive CLASSIC MODER)(セイフ・ハリディ (著)、ピーター・ヴァン・ロイ (著)、Peter Van-Roy (著)、 Seif Haridi (著)、羽永 洋 (翻訳) 、翔泳社、原書: Concepts, Techniques, and Models of Computer Programming(CTM))の第部(一般的計算モデル)、第2章(宣言的計算モデル)、2.9(練習問題)、2.(文脈的環境)を解いてみる。

2.(文脈的環境)

  1. 呼び出し前
    ([{MulByN A B}, {MulByN -> m, A -> a, B -> x1, N -> n}],
     {m = (proc {$ X Y} Y=N*X end, {N -> n}), a = 10, x1, n = 3})
  2. 手続き呼び出しを実行、呼び出し後
    ([Y=N*X, {X -> a, Y -> x1, N -> n}]
     {m = (proc {$ X Y} Y=N*X end, {N -> n}), a = 10, x1, n = 3})
  3. ([], {m = (proc {$ X Y} Y=N*X end, {N -> n}), a = 10, x1 = 30, n = 3})

次のコードについて考える。

コード(Emacs)

declare MulByN N in
N=3
proc {MulByN X ?Y}
   Y=N*X
end

local A B in
   A=10
   {MulByN A B}
   {Browse B}
   local N in
      N=10
      {MulByN A B}
      {Browse B}
   end
end

この時、手続き本体の実行で、写像 N -> 3がその環境に追加された場合、

  1. 呼び出し前
    ([{MulByN A B}, {MulByN -> m, A -> a, B -> x1, N -> n'}],
     {m = (proc {$ X Y} Y=N*X end, {N -> n}), n' = 10, a = 10, x1, n = 3, })
    
  2. 手続き呼び出しを実行、呼び出し後
    ([Y=N*X, {X -> a, Y -> x1, N -> n'}]
     {m = (proc {$ X Y} Y=N*X end, {N -> n}), n' = 10, a = 10, x1, n = 3})
  3. ([], {m = (proc {$ X Y} Y=N*X end, {N -> n}), n' = 10, a = 10, x1 = 30, n = 3})
となり、x1 = 30となる。

追加されなかった場合、

  1. 呼び出し前
    ([{MulByN A B}, {MulByN -> m, A -> a, B -> x1, N -> n'}],
     {m = (proc {$ X Y} Y=N*X end, ∅), n' = 10, a = 10, x1, n = 3, })
  2. 手続き呼び出しを実行、呼び出し後
    ([Y=N*X, {X -> a, Y -> x1, N -> n'}]
     {m = (proc {$ X Y} Y=N*X end, ∅), n' = 10, a = 10, x1, n = 3})
    
  3. ([], {m = (proc {$ X Y} Y=N*X end, ∅), n' = 10, a = 10, x1 = 100, n = 3})
となり、x1 = 100となる。

よって、写像 N -> 3を環境に追加するステップが必要。

0 コメント:

コメントを投稿