next up previous contents
Next: ox_sm1 phrase book Up: サンプルサーバ, クライアント Previous: ox

ox_asir phrase book

[ この節の記述は古い] CMObject と asir の object は次の規則にしたがって変換される. なお asir の object のタグをみるには関数 type を用いる.

1.
Null : 0 として使用される.
2.
Integer32 : 内部的にのみ使用される. 送出は, ZZ に変換される. -1 は (unsigned int) -1 に変換されてから, ZZ に変換されるので, 正の数となる.
3.
Cstring : 文字列 (type = 7) に変換される.
4.
ZZ : 数 (type = 1 ) に変換される.
5.
QQ : 数 (type = 1 ) に変換される.
6.
List : リスト (type = 4) に変換される.
7.
Dpolynomial : 分散表現多項式 (type = 9) に変換される. order はうけとったモノミアルのリストと同じ order である.
8.
RecursivePolynomial : 再帰表現多項式に変換される. 内部順序に自動変換される.
9.
Indeterminate : 不定元に変換される.
記述のない CMObject に関しては, 利用できない (cf. mathcap ).

問題点: 0 の扱いの仕様がまださだまっていない. Null が数 (type = 1) の 0 に変換される版もある.

例: 分散表現多項式の x2-1 の因数分解を asir にやってもらう OXexpression の列をあげる.

(OX_DATA, (CMO_LIST, 4, CMO_DMS,CMO_DMS_GENERIC,
(CMO_MONOMIAL32,1,2,(CMO_ZZ,1)),
(CMO_MONOMIAL32,1,0,(CMO_ZZ,-1)))),
(OX_DATA, (CMO_INT32,1))
(OX_DATA, (CMO_STRING,"ox_dtop"))
(OX_COMMAND,(SM_executeString))

(OX_DATA, (CMO_INT32,1))
(OX_DATA, (CMO_STRING,"fctr"))
(OX_COMMAND,(SM_executeString))


(OX_DATA, (CMO_INT32,1))
(OX_DATA, (CMO_STRING,"ox_ptod"))
(OX_COMMAND,(SM_executeString))

(OX_COMMAND,(SM_popCMO))

ここで, ZZ の元を普通の整数表記であらわした. dtop1 および ptod1 はそれぞれ, 分散表現多項式を, Asir の再帰表現 多項式に, 逆に, Asir の再帰表現多項式を, 分散表現多項式に変換する, ユーザ定義の 1 引数関数である. これらの関数は Asir の リストにも作用させることが可能であり, その場合は 要素としてでてくる, 分散表現多項式 または Asir の再帰表現多項式 を必要な形に変換する. fctr は因数分解をする組み込み関数である.

kxx/oxasir.asir のソース.

OxVlist = [x,y,z]$

def ox_ptod(F) {
extern OxVlist;
if (type(F) == 4) return(map(ox_ptod,F));
else if (type(F) == 2) return(dp_ptod(F,OxVlist));
else return(F);
}

def ox_dtop(F) {
extern OxVlist;
if (type(F) == 4) return(map(ox_dtop,F));
else if (type(F) == 9) return(dp_dtop(F,OxVlist));
else return(F);
}

end$



Nobuki Takayama 平成14年1月20日