なんちゃってMathematicaを作る - その6 [なんちゃってMathematica]
これまで前置きばかりでちっとも進まなかった。今日から具体的な技術の話に突入することにする。
まず、Mathematicaの文法(シンタクス)を、内部構造がわかるような見方をすることから始める。
ユーザが入力する上でMathematicaの最も便利なところは、引数に「オプション」を使えるということである。キーワードとその値という組み合わせで、引数の位置によらないようにして、指定しなければデフォルトが使われる、というものである。Plotなんかの非常にたくさんの機能を持っている関数は、ほとんどの指定をオプションで行う。これが記憶力の乏しいユーザには便利で、とりあえずプロットをみることができればいいという場合ならすべてをデフォルトで表示すればいい。このデフォルト動作はPlot機能だけでなくいろいろな関数でも多くが「Automatic」に指定されていて、Mathematicaが最適なパラメータを選択する、というものである。Plotの場合、プロット範囲や座標軸の引き方などはAutomaticで適切に設定されて読みやすく表示される。
厳密な規定は無いけど、Mathematicaの内蔵関数では引数は計算対象、オプションはそのパラメータというふうに完全に区別されている。
そのへんは、まあいい。ここの本題ではない。ここではMathematicaのシンタクスを実装の面につながるような見方で整理してみることにする。
たとえば
さらに、Mathematicaがあればこのような入力を評価してみてもらいたい。
一方、たとえば
たとえばCなどではエラーになる
まず、Mathematicaの文法(シンタクス)を、内部構造がわかるような見方をすることから始める。
7 Mathematicaのシンタクス
Mathematicaは機能のフルネームをそのまま関数名にしている。入力は大変になるけど入力補助機能と組み合わせることでちょっとましになっている。ユーザが入力する上でMathematicaの最も便利なところは、引数に「オプション」を使えるということである。キーワードとその値という組み合わせで、引数の位置によらないようにして、指定しなければデフォルトが使われる、というものである。Plotなんかの非常にたくさんの機能を持っている関数は、ほとんどの指定をオプションで行う。これが記憶力の乏しいユーザには便利で、とりあえずプロットをみることができればいいという場合ならすべてをデフォルトで表示すればいい。このデフォルト動作はPlot機能だけでなくいろいろな関数でも多くが「Automatic」に指定されていて、Mathematicaが最適なパラメータを選択する、というものである。Plotの場合、プロット範囲や座標軸の引き方などはAutomaticで適切に設定されて読みやすく表示される。
厳密な規定は無いけど、Mathematicaの内蔵関数では引数は計算対象、オプションはそのパラメータというふうに完全に区別されている。
そのへんは、まあいい。ここの本題ではない。ここではMathematicaのシンタクスを実装の面につながるような見方で整理してみることにする。
7.1 Mathematicaシンタクスの基本
Mathematicaは実はほとんどシンタクスらしいシンタクスはない。規則はふたつ、A,B,C,...,Xが式(expression)であるなら A[] あるいは A[B,C,...,X] もまた式である。と、
Atom(原子オブジェクト)は式である。ただしAtomとは ・シンボル(Abcdなど) ・文字列("string"など) ・数(3.14など) の3種類である。このふたつ。この二つの規則に従った記号列はMathematicaシンタクスを満足する。それ以上はシンタクスではなく意味の解釈の問題となる。
7.1.1 言葉の定義とシンタクスの例
また、規則ではないが定義としてA[B,C,...] の"A"のことを「頭部(Head)」、それ以外を「引数(Argument)」という。 また、B,C,...のことを「要素(Elements)」という。は重要である。
たとえば
Apply[Plus,Range[10]] Plus[1,Power[x,2],Power[Plus[y,z],2]]などは、Mathematicaの式として有効である。
さらに、Mathematicaがあればこのような入力を評価してみてもらいたい。
3.14[1] "ABCD"[Plot] A[B[C],D][E]などは、なにも文句を言わず無評価(正確には書き換え無し)で返されてくる。
一方、たとえば
A[[] [A] ]]]]などは、エラーとなる。このようにMathematicaでは括弧の数さえ合っていれば、実質的に文法エラーというのは発生しない。
たとえばCなどではエラーになる
A[,]も
A[Null,Null]と解釈されてしまってエラーとはならない(これは正確には、このあと説明する糖衣構文の機能の結果である)。
2011-11-10 21:56
nice!(0)
コメント(0)
トラックバック(0)
コメント 0