なんちゃってMathematicaを作る - その9 [なんちゃってMathematica]
ちょっと前の話になってしまったけど、Mathematicaのシンタクスの基本をおさらいした。今日はMathematicaが入力された式に対して何をしているか、ということ。
種明かしのような結論だけ言うと、規則に従った「式の書き換え」をしているだけである。そのことをLISP方言(?)で「評価する」と呼んでいる。「評価(Evaluate)」なんて大袈裟な言葉を使ってるけどやってることはバカみたいに単純。でもその結果(「評価」することで得られるもの)は実に目覚ましい。それが「評価」のすごいとこ。
Mathematicaは入力に対して
評価をもう少し詳しく見てみると
このように、書き換え規則は(原則的に)頭部によって決まる。この場合、頭部「Plus」が引数の総和に書き換える、という規則を保持している。「評価する」とは式の頭部に書き換え規則を問い合わせてそれに従って書き換え、入力式をそれに置き換える、ということである。
頭部は原則的に書き換え規則を一つだけ持つ(正確には引数のパターンひとつに対して規則ひとつ)。「何も書き換えない」というのも書き換え規則の一つで、これがデフォルトの規則である。
頭部は単純なシンボルである必要はない。たとえば
これで
ちなみに、ここに現れるイコール(=)記号はシンタクスシュガーの一つで
種明かしのような結論だけ言うと、規則に従った「式の書き換え」をしているだけである。そのことをLISP方言(?)で「評価する」と呼んでいる。「評価(Evaluate)」なんて大袈裟な言葉を使ってるけどやってることはバカみたいに単純。でもその結果(「評価」することで得られるもの)は実に目覚ましい。それが「評価」のすごいとこ。
8 Mathematicaの評価
評価の詳細に関しては改めて考えることにするが、Mathematicaがどうしているか、をざっとみてみる。Mathematicaは入力に対して
- 構文解析
- 文法エラーをチェック
- シンタクスシュガーを本来の形に書き換え
- 内部形式に変換
- それを「評価(Evaluate)」し
- その結果を出力する
評価をもう少し詳しく見てみると
Plus[1,2]は要素を足した結果に書き換えられ、
3となる。これをMathematicaはもう一度評価し、3を評価すると3となってもうこれ以上書き換えられないので、これを出力する(実際には変化しないことを確認する最後の評価というのはなるべく行われないようになっていると思われる)。
このように、書き換え規則は(原則的に)頭部によって決まる。この場合、頭部「Plus」が引数の総和に書き換える、という規則を保持している。「評価する」とは式の頭部に書き換え規則を問い合わせてそれに従って書き換え、入力式をそれに置き換える、ということである。
頭部は原則的に書き換え規則を一つだけ持つ(正確には引数のパターンひとつに対して規則ひとつ)。「何も書き換えない」というのも書き換え規則の一つで、これがデフォルトの規則である。
頭部は単純なシンボルである必要はない。たとえば
f[1]=Plus f[2]=Times入力してみる。
これで
f[1][1,2]を評価すると3が返り
f[2][1,2]を評価すると2が返る。これはf[1]、f[2]が頭部として書き換え規則を保持している、ということである。
ちなみに、ここに現れるイコール(=)記号はシンタクスシュガーの一つで
Set[f[1],Plus] Set[f[2],Times]のように内部的に書き換えられた後、評価される。Setというシンボルは一番目の要素を2番目の要素に書き換える、という規則を定義する。
2011-11-19 19:42
nice!(0)
コメント(0)
トラックバック(0)
コメント 0