next up previous contents
Next: Zero Up: 数, 多項式 の CMO Previous: 数, 多項式 の CMO

Indeterminate および Tree

Group CMObject/Tree requires CMObject/Basic.
Tree, Lambda $\in$ CMObject/Tree.

\begin{eqnarray*}\mbox{Tree} &:& ({\tt CMO\_TREE}, {\sl Cstring}  {\rm name},
...
...}) \\
& & \mbox{ -- body を args を引数とする関数とする. } \\
\end{eqnarray*}


数式を処理するシステムでは, Tree 構造が一般にもちいられる. たとえば, $\sin(x+e)$ は, (sin, (plus, x, e)) なる Tree であらわすのが一般的である. Tree の表現を スタックマシンのレベルでおこなうとすると, ox_BEGIN_BLOCK, ox_END_BLOCK で評価を抑制するのが 一つの方法である (cf. Postscript の { , } ). たとえば上の方法では x, e, plus, sin を begin block, end block でかこめばよろしい. われわれはスタックマシンの実装をなるべく簡単にするという立場をとりたい, また数学オブジェクトを OX スタックマシンと CMObject を混在して表現したく ない. したがって, Tree 構造は Open Math 風の表現をもちいた CMO を導入することにした. またこのほうが, われわれの想定するシステム xxx において, Open XM 対応が はるかに容易である. なお, Tree は, Open Math では, Symbol, Application のメカニズムに相当する.

Lambda は関数を定義するための関数である. Lisp の Lambda 表現と同じ.

例: sin(x+e) の表現.

(CMO_TREE, (CMO_STRING, "sin"), 
    (CMO_LIST,[size=]1,(CMO_LIST,[size=]2,(CMO_STRING, "cdname"),
                                          (CMO_STRING,"basic")))
    (CMO_LIST,[size=]1, 
        (CMO_TREE, (CMO_STRING, "plus"), (CMO_STRING, "basic"),
            (CMO_LIST,[size=]2, (CMO_INDETERMINATE,"x"),
                 (CMO_TREE,(CMO_STRING, "e"),  自然対数の底
    (CMO_LIST,[size=]1,(CMO_LIST,[size=]2,(CMO_STRING, "cdname"),
                                          (CMO_STRING,"basic")))
        ))
    )
)
Leave の成分には, 多項式を含む任意のオブジェクトがきてよい.

Example:

sm1> [(plus) [[(cdname) (basic)]] [(123).. (345)..]] [(class) (tree)] dc ::
Class.tree [$plus$ , [[$cdname$ , $basic$ ]], [ 123 , 345 ]  ]

Example:

asir
[753] taka_cmo100_xml_form(quote(sin(x+1)));
<cmo_tree>  <cmo_string>"sin"</cmo_string> 
 <cmo_list><cmo_int32 for="length">1</cmo_int32>   
   <cmo_list><cmo_int32 for="length">2</cmo_int32>    
     <cmo_string>"cdname"</cmo_string> 
     <cmo_string>"basic"</cmo_string> 
   </cmo_list> </cmo_list> 
<cmo_tree>    <cmo_string>"plus"</cmo_string> 
  <cmo_list><cmo_int32 for="length">1</cmo_int32>     
    <cmo_list><cmo_int32 for="length">2</cmo_int32>      
      <cmo_string>"cdname"</cmo_string> 
      <cmo_string>"basic"</cmo_string> 
    </cmo_list> </cmo_list> 
 <cmo_indeterminate> <cmo_string>"x"</cmo_string>  </cmo_indeterminate>
 <cmo_zz>1</cmo_zz>
</cmo_tree></cmo_tree>

次に, 分散表現多項式に関係するグループを定義しよう.

Group CMObject/DistributedPolynomials requires CMObject/Primitive, CMObject/Basic.
Monomial, Monomial32, Coefficient, Dpolynomial, DringDefinition, Generic DMS ring, RingByName, DMS of N variables $\in$ CMObject/DistributedPolynomials.

\begin{eqnarray*}\mbox{Monomial} &:& \mbox{Monomial32}  \vert  \mbox{Zero} \ ...
...ector,} \\
& & \mbox{ -- outord は出力するときの変数順序.} \\
\end{eqnarray*}


RingByName や DMS of N variables はなくても, DMS を定義できる. したがって, これらを実装してないシステムで DMS を扱うものが あってもかまわない.

以下, 以上の CMObject にたいする, xxx = asir, kan の振舞いを記述する.



Nobuki Takayama 平成14年1月20日