[ この節の記述は古い] CMObject と asir の object は次の規則にしたがって変換される. なお asir の object のタグをみるには関数 type を用いる.
問題点: 0 の扱いの仕様がまださだまっていない. Null が数 (type = 1) の 0 に変換される版もある.
例: 分散表現多項式の の因数分解を 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$