|
2.9.4 テキスト記述の式の解釈

文字列とボックスの式への変換
文字列を式に変換する.
In[1]:= ToExpression["2 + 3 + x/y"]
Out[1]= 
StandardFormの式をボックス形式に変換する.
In[2]:= ToBoxes[2 + x^2, StandardForm]
Out[2]= 
ボックス形式からもとの式を再構築する.
In[3]:= ToExpression[%]
Out[3]= 
式はテキストとして入力される.入力があると,実行的な ToExpressionの機能が効果的に使われ,テキストが評価可能な式を表しているかどうかを解釈する.
ノートブック用フロントエンドを使っている場合,入力したセルの内容が評価のためカーネルに送られるものに限って上記の解釈作業が行われる.したがって,ノートブックで数式等を書くとき,それがカーネルに送られるものでなければ,特にカーネルの認識可能な形式でなければいけないということはない.

入力式の表記法と階層関係
同じ式を表記別に入力する.まず,FullFormで行う.
In[4]:= Plus[1, Power[x, 2]]
Out[4]= 
次にInputFormで入力する.
In[5]:= 1 + x^2
Out[5]= 
最後に,StandardFormで入力する.
In[6]:= 
Out[6]= 
Mathematicaには入力テキストと式の対応関係を定義した変換規則が組み込まれている. ToExpressionを使うと,その変換規則をもとに入力テキストから式への変換が行われる.
これらの変換規則が集まり Mathematica言語の文法を形作っている.変換規則の例として, x + yとタイプすると関数形の式 Plus[x, y]を生成するとか,StandardFormで と入力があると式 Power[x, y]を生成する等がある. FullFormの入力であれば解釈に使う規則は単純明快である.つまり,「式は必ず特定頭部を持ち,頭部の後には角カッコでくくった引数要素が続く」とする.入力形式が InputFormになると規則はやや複雑になる.演算子の + や,関係記号である = や ->を許容しながら被演算子(オペラント)を適切に読み取らなければいけない.StandardFormにおいてはいっそう複雑な規則が必要になる.対処しなければいけない演算子や被演算子は単純な一次元配置のものだけでなく,分数や積分記号に見られるような二次元的な広がりを持つものもある.
以上3つの表記法は階層的な関係でつながっている.つまり,FullFormで記述可能なものはInputFormですべて有効であるし,InputFormで有効なものはStandardFormでも有効である.
ノートブック用フロントエンドを使っているなら,StandardFormの提供するすべての機能を利用したい.使うフロントエンドがテキスト型インターフェースなら,普通はInputFormを使うしかない.

InputFormを使った2種類の記述形態
ノートブックでStandardFormを使っている場合, 等の数式を直接入力し,また,編集することができる(数学記号は左右だけでなく上下等にも広がりを持つので二次元的な記述になる).InputFormで記述しているときは,行モードの入力法を使い入力,編集を行う.また,行モードの入力でもStandardFormの記述はできる.表記法がInputFormでもStandardFormでも,例えば, \!\(x\^2\)と記述すると,それは の数式を意味し,カーネルでは Power[x, 2]と解釈される.
式を行モードで入力する.
In[7]:= x^2 + 1/y
Out[7]= 
ノートブックにこの記述文を入力すると即座に二次元的な表示になる.
In[8]:= \!\( x\^2 + 1\/y \)
Out[8]= 
上の2つの式は表示上違うが,内容的には全く同じである.
In[9]:= % == %%
Out[9]= 
Mathematicaから二次元形式をコピーすると,通常 \!\( ... \)形式を得る.このような一次元形式を,ノートブックにペーストすると自動的に二次元形式となる. \!\( ... \)とノートブックに打ち込んだ場合, 「二次元式の作成」 (Make 2D)メニューを使って二次元形式に変換できる.

他のテキスト形式からの変換
テキスト形式を使い,StandardFormとそのサブセットであるFullFormとInputFormのどれでも式を記述することができる.これらの表記法に基づいた記述文は1対1の関係で確実に式に変換することができる.
テキスト形式の記述法にはTraditionalFormと呼ばれるもう1つの記述法がある.TraditionalFormは主に出力用に使われ, Mathematicaの認識する式なら何でも表示することができる.ただし,TraditionalFormの記述はStandardFormに比べ正確性に欠ける.また,一度,TraditionalFormで式を出力したら,その式からもとのFullFormの式は再構築できないときもある.
それでも,書式 ToExpression[input, TraditionalForm]を使えば,TraditionalFormの記述から強制的に式を生成させることは可能である.確実な解釈は保証されない.
文字列をTraditionalFormの式として認識させる.
In[10]:= ToExpression["f(6)", TraditionalForm]
Out[10]= 
同じ式の文字列をStandardFormにすると,違った解釈がなされる.
In[11]:= ToExpression["f(6)", StandardForm]
Out[11]= 
計算結果をTraditionalFormで生成した場合,式の各成分に対応したボックス記述には InterpretationBoxと TagBoxという特殊オブジェクトが加えられる.これらのオブジェクトはTraditionalFormの式から内部表記の式を再構築するための拡張情報として使われる.
この拡張情報の埋め込み処理はStandardFormからTraditionalFormに変換した式に対しても行われる.ただし,はじめからTraditionalFormで式を編集したり,TraditionalFormの出力式に著しい変更を施した場合は,拡張情報が失われてしまい,式の正確な解釈が困難になってしまうので注意する.
|