next up previous contents
: ox_sm1 phrase book : サンプルサーバ, クライアント : 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 に変換される版もある.

例: 分散表現多項式の $x^2-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 平成15年5月13日