なんちゃってMathematicaを作る - その12 [なんちゃってMathematica]
前回はLISPの評価エンジン(eval)をMathematicaだけでなく数式処理ソフトウェアの多くが使っているということを見た。基本的には「なんちゃってMathematica」にも同じようにLISP評価エンジンが使えるはず。今日はそうすることで遭遇するであろう問題点を整理しておく。
式がどんどん書き換えられて少なくとも出力そのもの以外は評価が終わると不要になる。実装上は、それをObjective-Cのオブジェクト管理機構を使って実現可能かどうか、というところが重要だろう。
Mathematicaのおおまかな構造は理解できたということにして、他の部分を考えてみることにする。この話にも飽きてきたし。
8.3 評価エンジンの問題点
8.3.1 ガベージコレクション
この時点でいくつか問題が思い浮かぶ。まずガベージコレクションをどうするか、ということ。ガベージコレクションはLISPのシステムではいつも問題になっていたが、その評価メカニズムを流用すれば同様の問題が発生する。式がどんどん書き換えられて少なくとも出力そのもの以外は評価が終わると不要になる。実装上は、それをObjective-Cのオブジェクト管理機構を使って実現可能かどうか、というところが重要だろう。
8.3.2 Replaceによる書き換え
また、MathemaitcaにはReplaceという陽に書き換え規則を与える手段があって、Mathematicaのオプションはこの機構を使ってMathematicaコードとして実装されているので、なんちゃってMathematicaにとっても必須である。しかしこのReplaceの効率のいいメカニズムは結構難しい。8.3.3 Blanckオブジェクトの扱い
さらに、Blank[x]あるいは
Pattern[x,Blank[]]というかたちのオブジェクト(糖衣構文では_xやx_と書かれる)。これは普通仮引数のような使い方をするけど、もっと細かな制御が出来るようになっていてこれをどういうメカニズムで実装するか、というのも評価エンジンの大きな問題。
Mathematicaのおおまかな構造は理解できたということにして、他の部分を考えてみることにする。この話にも飽きてきたし。
2011-11-27 21:30
nice!(0)
コメント(0)
トラックバック(0)
コメント 0