SSブログ

なんちゃってMathematicaを作る - その9 [なんちゃってMathematica]

ちょっと前の話になってしまったけど、Mathematicaのシンタクスの基本をおさらいした。今日はMathematicaが入力された式に対して何をしているか、ということ。

種明かしのような結論だけ言うと、規則に従った「式の書き換え」をしているだけである。そのことをLISP方言(?)で「評価する」と呼んでいる。「評価(Evaluate)」なんて大袈裟な言葉を使ってるけどやってることはバカみたいに単純。でもその結果(「評価」することで得られるもの)は実に目覚ましい。それが「評価」のすごいとこ。

8  Mathematicaの評価

評価の詳細に関しては改めて考えることにするが、Mathematicaがどうしているか、をざっとみてみる。

Mathematicaは入力に対して
  1. 構文解析
    1. 文法エラーをチェック
    2. シンタクスシュガーを本来の形に書き換え
    3. 内部形式に変換
    を行って式を受け付け
  2. それを「評価(Evaluate)」し
  3. その結果を出力する
ということを繰り返している。これはインタプリタの基本的な評価とは、式を書き換え規則に従って変形することである。Mathematicaは、結果が変化しなくなるまで書き換え規則を適用する「無限評価系」である。

評価をもう少し詳しく見てみると
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番目の要素に書き換える、という規則を定義する。
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

献立11/19献立11/20 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。