qt_normalizefnodeは 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 の * へ.
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.