Go to the first, previous, next, last section, table of contents.


qt_normalize

qt_normalize(Expr[,Mode])
:: Expr を fnode標準形に変換する. Modeにより標準形への展開アルゴリズムを指定できる.
return
quote型
Expr
quote型
Mode
整数

fnodeは quote型の実体である. fnode は木であり, 型 id および子供からなる. 型および子供を取り出す関数が funargs_to_quote である. また fnode をリストに変換する関数が quotetolist である.

fnode の標準形はパターンマッチング, 書き換えを容易におこなうために導入された. fnode の標準形を fn と書くとき, 標準形の BNF風表現での定義は以下のとおり.

 fn           = formula | functor(nf [,...]) | sum_of_monom
     fnode の標準形.  functor は関数よびだしみたいなもの.
 sum_of_monom = monom [+ ...]
     モノミアルの和
 monom        = [formula *] nfpow [* ...]
     モノミアル
 nfpow        = nf | nf^(nf)
     冪乗部分の標準形
 formula      = Risa object

Mode の違いについては以下の例も参考に.

ctrl("print_quote",2);
A=quote((x-y)*(x+y));
   出力:  ((x)-(y))*((x)+(y))
B=qt_normalize(A,0);
   出力: ((x)+((-1)*(y)))*((x)+(y))  Mode=0. 展開はされない. +, * は n_op (nary-op) へ.
quotetolist(B);
   出力: [n_op,*,[n_op,+,[internal,x],[n_op,*,[internal,-1],[internal,y]]],[n_op,+,[internal,x],[internal,y]]]

B=qt_normalize(A,1);
   出力: ((x)^(2))+((x)*(y))+((-1)*((y)^(2)))+((-1)*(y)*(x))
           Mode=1. 展開する. +, * は n_op (nary-op) へ. 巾をまとめる. 
quotetolist(B);
   出力: [n_op,+,[b_op,^,[internal,x],[internal,2]],[n_op,*,[internal,x],[internal,y]],[n_op,*,[internal,-1],[b_op,^,[internal,y],[internal,2]]],[n_op,*,[internal,-1],[internal,y],[internal,x]]]

qt_normalize(A,2);
   出力: ((x)*(x))+((x)*(y))+((-1)*(y)*(x))+((-1)*(y)*(y))
           Mode=2. 展開する. +, * は n_op (nary-op) へ. 巾は使わない.
quotetolist(B);
   出力: [n_op,+,[b_op,^,[internal,x],[internal,2]],[n_op,*,[internal,x],[internal,y]],[n_op,*,[internal,-1],[b_op,^,[internal,y],[internal,2]]],[n_op,*,[internal,-1],[internal,y],[internal,x]]]

qt_normalize(`x^2,2);
   出力: (x)*(x)
       Mode=2. 巾は使わない. n-ary の * へ.
参照
section nqt_match, section nqt_match_rewrite, @xref{quotetolist}, section quote_to_funargs, funargs_to_quote, remove_paren

ChangeLog


Go to the first, previous, next, last section, table of contents.