=================================================================== RCS file: /home/cvs/OpenXM/doc/OpenXM-specs/cmo-basic1.tex,v retrieving revision 1.4 retrieving revision 1.11 diff -u -p -r1.4 -r1.11 --- OpenXM/doc/OpenXM-specs/cmo-basic1.tex 2000/01/24 02:48:24 1.4 +++ OpenXM/doc/OpenXM-specs/cmo-basic1.tex 2001/08/27 05:39:15 1.11 @@ -1,4 +1,4 @@ -%% $OpenXM: OpenXM/doc/OpenXM-specs/cmo-basic1.tex,v 1.3 2000/01/23 05:28:33 noro Exp $ +%% $OpenXM: OpenXM/doc/OpenXM-specs/cmo-basic1.tex,v 1.10 2001/04/10 11:56:29 takayama Exp $ //&jp \section{ 数, 多項式 の CMO 表現 } //&eg \section{ CMOexpressions for numbers and polynomials } \label{sec:basic1} @@ -27,15 +27,33 @@ 以下, グループ CMObject/Basic, CMObject/Tree および CMObject/DistributedPolynomial に属する CMObject の形式を説明する. -\noroa{ tagged list を導入すべきか? cf. SSkan/plugin/cmo.txt } +\noindent +{\tt OpenXM/src/ox\_toolkit} にある {\tt bconv} をもちいると +CMO expression を binary format に変換できるので, +これを参考にするといい. */ /*&eg In the sequel, we will explain on the groups CMObject/Basic, CMObject/Tree and CMObject/DistributedPolynomial. + +\noindent +The program {\tt bconv} at {\tt OpenXM/src/ox\_toolkit} +translates +CMO expressions into binary formats. +It is convinient to understand the binary formats explained in +this section. */ +/*&C +\noindent Example: +\begin{verbatim} +bash$ ./bconv +> (CMO_ZZ,123123); +00 00 00 14 00 00 00 01 00 01 e0 f3 +\end{verbatim} +*/ /*&jp \bigbreak @@ -46,9 +64,11 @@ ZZ, QQ, Zero, Rational, Indeterminate,$\in$ CMObject/B \mbox{Zero} &:& ({\tt CMO\_ZERO}) \\ & & \mbox{ --- ユニバーサルな ゼロを表す. } \\ \mbox{ZZ} &:& ({\tt CMO\_ZZ},{\sl int32}\, {\rm f}, {\sl byte}\, \mbox{a[1]}, \ldots -{\sl byte}\, \mbox{a[m]} ) \\ +{\sl byte}\, \mbox{a[$|$f$|$]} ) \\ &:& \mbox{ --- bignum をあらわす. a[i] についてはあとで説明}\\ -\mbox{QQ} &:& ({\tt CMO\_QQ}, {\sl ZZ}\, {\rm a}, {\sl ZZ}\, {\rm b}) \\ +\mbox{QQ} &:& ({\tt CMO\_QQ}, + {\sl int32}\, {\rm m}, {\sl byte}\, \mbox{a[1]}, \ldots, {\sl byte}\, \mbox{a[$|$m$|$]}, + {\sl int32}\, {\rm n}, {\sl byte}\, \mbox{b[1]}, \ldots, {\sl byte}\, \mbox{b[$|$n$|$]})\\ & & \mbox{ --- 有理数 $a/b$ を表す. } \\ \mbox{Rational} &:& ({\tt CMO\_RATIONAL}, {\sl CMObject}\, {\rm a}, {\sl CMObject}\, {\rm b}) \\ & & \mbox{ --- $a/b$ を表す. } \\ @@ -66,9 +86,11 @@ ZZ, QQ, Zero, Rational, Indeterminate,$\in$ CMObject/B \mbox{Zero} &:& ({\tt CMO\_ZERO}) \\ & & \mbox{ --- Universal zero } \\ \mbox{ZZ} &:& ({\tt CMO\_ZZ},{\sl int32}\, {\rm f}, {\sl byte}\, \mbox{a[1]}, \ldots -{\sl byte}\, \mbox{a[m]} ) \\ +{\sl byte}\, \mbox{a[$|$m$|$]} ) \\ &:& \mbox{ --- bignum. The meaning of a[i] will be explained later.}\\ -\mbox{QQ} &:& ({\tt CMO\_QQ}, {\sl ZZ}\, {\rm a}, {\sl ZZ}\, {\rm b}) \\ +\mbox{QQ} &:& ({\tt CMO\_QQ}, + {\sl int32}\, {\rm m}, {\sl byte}\, \mbox{a[1]}, \ldots, {\sl byte}\, \mbox{a[$|$m$|$]}, + {\sl int32}\, {\rm n}, {\sl byte}\, \mbox{b[1]}, \ldots, {\sl byte}\, \mbox{b[$|$n$|$]})\\ & & \mbox{ --- Rational number $a/b$. } \\ \mbox{Rational} &:& ({\tt CMO\_RATIONAL}, {\sl CMObject}\, {\rm a}, {\sl CMObject}\, {\rm b}) \\ & & \mbox{ --- Rational expression $a/b$. } \\ @@ -81,6 +103,7 @@ ZZ, QQ, Zero, Rational, Indeterminate,$\in$ CMObject/B */ /*&jp +\subsection{Indeterminate および Tree} Indeterminate は変数名をあらわす. v はバイト列であればなにを用いてもよいが, システム毎に変数名として用いられるバイト列は制限がある. @@ -92,6 +115,7 @@ escape sequence を用いて実現するのは, 無理があるようで テーブルを作成する必要があるであろう.) */ /*&eg +\subsection{Indetermnate and Tree} Indeterminate is a name of a variable. v may be any sequence of bytes, but each system has its own restrictions on the names of variables. @@ -106,10 +130,10 @@ Group CMObject/Tree requires CMObject/Basic. \\ Tree, Lambda $\in$ CMObject/Basic. \\ \begin{eqnarray*} \mbox{Tree} &:& ({\tt CMO\_TREE}, {\sl Cstring}\, {\rm name}, - {\sl Cstring}\, {\rm cdname}, {\sl List}\, {\rm leaves}) \\ + {\sl List}\, {\rm attributes}, {\sl List}\, {\rm leaves}) \\ & & \mbox{ --- 名前 name の定数または関数. 関数の評価はおこなわない. } \\ -& & \mbox{ --- cdname は空文字列でなければ name の意味が説明されている }\\ -& & \mbox{ --- OpenMath CD (content dictionary) の名前. } \\ +& & \mbox{ --- attributes は空リストでなければ name の属性を保持している. }\\ +& & \mbox{ --- 属性リストは, key と 値のペアである. }\\ \mbox{Lambda} &:& ({\tt CMO\_LAMBDA}, {\sl List}\, {\rm args}, {\sl Tree} {\rm body}) \\ & & \mbox{ --- body を args を引数とする関数とする. } \\ @@ -123,10 +147,10 @@ Group CMObject/Tree requires CMObject/Basic. \\ Tree, Lambda $\in$ CMObject/Basic. \\ \begin{eqnarray*} \mbox{Tree} &:& ({\tt CMO\_TREE}, {\sl Cstring}\, {\rm name}, - {\sl Cstring}\, {\rm cdname}, {\sl List}\, {\rm leaves}) \\ + {\sl List}\, {\rm attributes}, {\sl List}\, {\rm leaves}) \\ & & \mbox{ --- A function or a constant of name. Functions are not evaluated. } \\ -& & \mbox{ --- cdname may be a null. If it is not null, it is the name of}\\ -& & \mbox{ --- the OpenMath CD (content dictionary). } \\ +& & \mbox{ --- attributes may be a null list. If it is not null, it is a list of}\\ +& & \mbox{ --- key and value pairs. } \\ \mbox{Lambda} &:& ({\tt CMO\_LAMBDA}, {\sl List}\, {\rm args}, {\sl Tree} {\rm body}) \\ & & \mbox{ --- a function with the arguments body. } \\ @@ -167,7 +191,7 @@ stack machine commands for delayed evaluation. However it makes the implementation of stack machines complicated. It is desirable that CMObject is independent of OX stack machine. Therefore we introduce an OpenMath like tree representation for CMO -tree object. +Tree object. This method allows us to implement tree structure easily on individual OpenXM systems. Note that CMO Tree corresponds to Symbol and Application in OpenMath. @@ -190,23 +214,27 @@ It is the same as the Lambda expression in Lisp. //&jp 例: $sin(x+e)$ の表現. //&eg Example: the expression of $sin(x+e)$. \begin{verbatim} -(CMO_TREE, (CMO_STRING, "sin"), (CMO_STRING, "basic"), +(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"), -//&jp (CMO_TREE,(CMO_STRING, "e"), 自然対数の底 -//&eg (CMO_TREE,(CMO_STRING, "e"), Napier's number - (CMO_STRING, "basic")) +//&jp (CMO_TREE,(CMO_STRING, "e"), 自然対数の底 +//&eg (CMO_TREE,(CMO_STRING, "e"), the base of natural logarithms + (CMO_STRING, "basic")) )) ) ) \end{verbatim} +//&jp Leave の成分には, 多項式を含む任意のオブジェクトがきてよい. +//&eg Elements of the leave may be any objects including polynomials. \noindent Example: \begin{verbatim} sm1> [(plus) (Basic) [(123).. (345)..]] [(class) (tree)] dc :: -Class.tree [ $plus$ , $Basic$ , [ 123 , 345 ] ] +Class.tree [ $plus$ , $basic$ , [ 123 , 345 ] ] \end{verbatim} @@ -533,7 +561,7 @@ $\in$ CMObject/RecursivePolynomial \\ \mbox{ Polynomial in 1 variable}\, | \, \mbox{Coefficient} \\ \mbox{RringDefinition} & : & \mbox{ {\sl List} v } \\ -& & \quad \mbox{ --- v は, 変数名(indeterminate) のリスト. } \\ +& & \quad \mbox{ --- v は, 変数名(indeterminate) または Tree のリスト. } \\ & & \quad \mbox{ --- 順序の高い順. } \\ \end{eqnarray*} */ @@ -563,7 +591,7 @@ $\in$ CMObject/RecursivePolynomial \\ \mbox{ Polynomial in 1 variable}\, | \, \mbox{Coefficient} \\ \mbox{RringDefinition} & : & \mbox{ {\sl List} v } \\ -& & \quad \mbox{ --- v is a list of names of indeterminates. } \\ +& & \quad \mbox{ --- v is a list of names of indeterminates or trees. } \\ & & \quad \mbox{ --- It is sorted in the decreasing order. } \\ \end{eqnarray*} */ @@ -677,7 +705,7 @@ $\in$ CMObject/MachineDouble \\ \bigbreak //&jp 次に IEEE 準拠の float および Big float を定義しよう. -//&eg We define IEEE conformant float and big float. +//&eg We define float and big float conforming to the IEEE standard. \begin{verbatim} #define CMO_BIGFLOAT 50 #define CMO_IEEE_DOUBLE_FLOAT 51 @@ -688,8 +716,8 @@ IEEE 準拠の float については, IEEE 754 double precisio format (64 bit) の定義を見よ. */ /*&eg -See IEEE 754 double precision floating-point (64 bit) for the details of IEEE -conformant float. +See IEEE 754 double precision floating-point (64 bit) for the details of +float conforming to the IEEE standard. */ \noindent