version 1.3, 2005/04/02 05:56:57 |
version 1.8, 2005/05/04 05:47:03 |
|
|
/*&generate-prologue |
|
*/ |
|
$Id$ |
$Id$ |
$OpenXM: OpenXM/src/asir-contrib/testing/tr-ja.oxt,v 1.2 2005/04/01 11:34:21 takayama Exp $ |
$OpenXM: OpenXM/src/asir-contrib/testing/tr-ja.oxt,v 1.7 2005/04/21 10:54:50 takayama Exp $ |
|
|
$BCm0U(B: testing/tr.rr $B$G$O(B quote $B$r(B quotetolist $B$G(B list $B$KJQ49$7$F07$&$?$a(B, |
$BCm0U(B: testing/tr.rr $B$G$O(B quote $B$r(B quotetolist $B$G(B list $B$KJQ49$7$F07$&$?$a(B, |
$B2<$N;EMM$H$O$3$H$J$j(B, list $B7?$G%G!<%?$rLa$9>l9g$bB?$$(B. |
$B2<$N;EMM$H$O$3$H$J$j(B, list $B7?$G%G!<%?$rLa$9>l9g$bB?$$(B. |
$B%f!<%68@8l$G=q$$$F$$$k4X78>e(B pn(x) $B$r(B pn("x") $B$H$7$F$$$k(B. |
$B%f!<%68@8l$G=q$$$F$$$k4X78>e(B pn(x) $B$r(B pn("x") $B$H$7$F$$$k(B. |
$BB>$K$bF1MM$J4X?t$,$"$j(B. |
$BB>$K$bF1MM$J4X?t$,$"$j(B. |
|
|
@c -------------------------------------------------------------------- |
$B$3$N%U%!%$%k$+$i(B texi $B%U%!%$%k$r:n@.$9$k$K$O0J2<$N$h$&$KF~NO$7$F2<$5$$(B. |
@section quote $B$KBP$9$k4pK\4X?t(B |
oxgentexi $B$O(B OpenXM/src/util $B$N2<$K$"$j$^$9(B. |
|
|
/*&usage begin: qt_node(Q) |
nkf -e tr.oxt | oxgentexi --noSorting --title 'Term rewriting functions for Risa/Asir' --author 'Nobuki Takayama' >t.texi |
|
|
|
begin: AAA01| |
|
|
|
@c --------------------------------------------------------- |
|
@section $BJQ?t%Q%?!<%s$H4X?t%Q%?!<%s(B |
|
|
|
|
|
$BJQ?t%Q%?!<%s(B |
|
|
|
pn(x) $BG$0U$N$b$N$K%^%C%A(B. $B%^%C%A$7$?$b$N$r(B x $B$K(B bind. |
|
pn(x,qt_is_integer(x)) |
|
|
|
Todo; fn $B$OB?J,$$$i$J$$(B. qt_is_function(x) $B$G(B OK. |
|
fn(f) $BG$0U$N4X?t$K%^%C%A(B. $B%^%C%A$7$?4X?tL>$r(B f $B$K(B bind. |
|
fn(f,pn(x),pn(y)) $BG$0U$N4X?t$K%^%C%A(B. $B%^%C%A$7$?4X?tL>$r(B f $B$K(B bind. |
|
f $B$N0z?t$r(B x, y $B$K(B bind |
|
|
|
|
|
$B%Q%?!<%s$O(B quote $B$GM?$($k(B. |
|
$BM=Ls8l(B tr.and, tr.or, tr.not $B$O%Q%?!<%s$N%^%C%A$K4X$7$FO@M}1i;;$r$*$3$J$&(B. |
|
$B$?$H$($P(B |
|
quote(tr.and(pn(x,"qt.is_integer"),pn(x,"qt.is_non_negative",x))) |
|
$B$O(B x $B$,(B $B@0?t$G(B - $B$,@hF,$K$D$$$F$$$J$$>l9g%^%C%A$9$k(B. |
|
|
|
end: |
|
|
|
begin: AAA011| |
|
|
|
@c --------------------------------------------------------- |
|
@section $B<BAu$N$?$a$NJd=u4X?t(B |
|
|
|
@itemize @bullet |
|
@item @code{quotetolist}, @code{listtoquote}, @code{listtoquote_str} |
|
quote $B$H(B list $B$N4V$NJQ49(B. |
|
@item @code{quote_to_funargs}, @code{funargs_to_quote}, @code{get_function_name} |
|
quote $B$H(B funarg $B7A<0$NJQ49(B. $B<B83E*4X?t$N%^%K%e%"%k$r;2>H(B. |
|
@item @code{quotetoobj}, @code{eval_quote} |
|
quote $B$H(B object $B$N4V$NJQ49(B. |
|
@item @code{quote_input_form}, @code{ctrl("print_quote",1)}, |
|
quote $B$HJ8;zNs$N4V$NJQ49(B. |
|
@item @code{quote_flatten} |
|
$B<B83E*4X?t$N%^%K%e%"%k$r;2>H(B. |
|
@end itemize |
|
|
|
end: |
|
|
|
begin: AAA02| |
|
|
|
@section quote $B$KBP$9$k4pK\4X?t(B (module qt $B$N4X?t(B) |
|
|
|
end: |
|
|
|
|
|
begin: qt.node(Q) |
quote $B%G!<%?(B {Q} $B$N(B node $B$r<h$j=P$9(B. |
quote $B%G!<%?(B {Q} $B$N(B node $B$r<h$j=P$9(B. |
example: qt_node(quote(1+2*3)) |
example: qt.node(quote(1+2*3)) |
end: */ |
["b_op","+"] ($B8=:_$N<BAu$G$O$3$l$,La$k(B) |
|
end: |
|
|
|
|
/*&usage begin: qt_nchild(Q) |
begin: qt.nchild(Q) |
quote $B%G!<%?(B {Q} $B$N(B $B;R6!$N?t$rLa$9(B. |
quote $B%G!<%?(B {Q} $B$N(B $B;R6!$N?t$rLa$9(B. |
example: qt_nchild(quote(1+2*3)) 2 $B$rLa$9(B. |
example: qt.nchild(quote(1+2*3)) 2 $B$rLa$9(B. |
end: */ |
end: |
|
|
|
|
/*&usage begin: qt_child(Q,K) |
begin: qt.child(Q,K) |
quote $B%G!<%?(B {Q} $B$N(B {K} $BHVL\$N;R6!$rLa$9(B. |
quote $B%G!<%?(B {Q} $B$N(B {K} $BHVL\$N;R6!$rLa$9(B. |
example: qt_child(quote(1+2*3),1) quote(2*3) $B$rLa$9(B. |
example: qt.child(quote(1+2*3),1) quote(2*3) $B$rLa$9(B. |
example: qt_child(quote(1+2*3),0) quote(1) $B$rLa$9(B. |
example: qt.child(quote(1+2*3),0) quote(1) $B$rLa$9(B. |
end: */ |
end: |
|
|
|
begin: hoge| |
@c -------------------------------------------------------------------- |
@c -------------------------------------------------------------------- |
@subsection quote $B$KBP$9$k=R8l(B |
@section quote $B$KBP$9$k=R8l(B |
|
end: |
|
|
/*&usage begin: qt_is_integer(Q) |
begin: qt.is_integer(Q) |
quote $B%G!<%?(B {Q} $B$,@0?t$J$i(B 1 |
quote $B%G!<%?(B {Q} $B$,@0?t$J$i(B 1 |
example: qt_is_integer(quote(0)) |
example: qt.is_integer(quote(0)) |
end: */ |
end: |
|
|
/*&usage begin: qt_depend(Q,x) |
begin: qt.is_dependent(Q,x) |
quote $B%G!<%?(B {Q} $B$,ITDj85(B {x} $B$r4^$`$H(B 1, $B4^$^$J$$$H(B 0. |
quote $B%G!<%?(B {Q} $B$,ITDj85(B {x} $B$r4^$`$H(B 1, $B4^$^$J$$$H(B 0. |
example: qt_depend(quote(1+1/x),x) |
example: qt.is_dependent(quote(1+1/x),x) |
end: */ |
end: |
|
|
|
begin: qt.is_function(Q) |
|
quote $B%G!<%?(B {Q} $B$,4X?t$N$H$-(B 1, $B$=$&$G$J$$$H$-(B 0. |
|
example: qt.is_function(f(x,y)); |
|
end: |
|
|
|
begin: qt.is_minus(Q) |
|
quote $B%G!<%?(B {Q} $B$,7A<0E*$K(B -1 $B$h$j;O$^$k$H$-(B 1. |
|
example: qt.is_minus(quote(-1/x)); |
|
ref: qt.add_paren, qt.add_paren0 |
|
end: |
|
|
|
begin: qt.is_rational(Q) |
|
quote $B%G!<%?(B {Q} $B$,7A<0E*$KM-M}?t$N;~(B 1. |
|
example: qt.is_rational(quote(1/2)); |
|
ref: qt.cancel_number |
|
end: |
|
|
|
begin: hoge2| |
@c -------------------------------------------------------------------- |
@c -------------------------------------------------------------------- |
@subsection quote $B$KBP$9$k%3%s%9%H%i%/%?(B |
@section quote $B$KBP$9$k%3%s%9%H%i%/%?(B |
|
end: |
|
|
/*&usage begin: qt_zero() |
begin: qt.zero() |
quote 0 $B$rLa$9(B. |
quote 0 $B$rLa$9(B. |
end: */ |
end: |
|
|
/*&usage begin: qt_id(Qobj) |
begin: qt.id(Qobj) |
quote object {Qobj} $B$r$=$N$^$^La$9(B. |
quote object {Qobj} $B$r$=$N$^$^La$9(B. |
end: */ |
end: |
|
|
/*&usage begin: qt_replace(Qobj,[[x,Valuex],[y,Valuey],...]) |
begin: qt.replace(Qobj,[[x,Valuex],[y,Valuey],...]) |
quote object {Qobj} $B$NCf$N(B x $B$r(B Valuex, y $B$r(B Valuey, ... $B$KCV$-49$($?(B |
quote object {Qobj} $B$NCf$N(B x $B$r(B Valuex, y $B$r(B Valuey, ... $B$KCV$-49$($?(B |
quote object $B$rLa$9(B. |
quote object $B$rLa$9(B. |
example: qt_replace(quote(sin(x*@pi)), [[x,quote( (2*t+3) )]]) |
description: |
end: */ |
$B2]Bj(B; x, y $B$OBgJ8;z$b5v$9$+(B? @var{Qobj} $B$b85!94^$^$l$F$$$kBgJ8;z$rI>2A$7$FCV$-49$($k(B |
|
$B4X?t$bI,MW$+(B? |
|
|
qt_replace $B$O(B asir-contrib $B$N(B base_replace $B$H;w$?5!G=(B. |
example: qt.replace(quote(sin(x*@pi)), [[x,quote( (2*t+3) )]]) |
|
end: |
|
|
|
qt.replace $B$O(B asir-contrib $B$N(B base_replace $B$H;w$?5!G=(B. |
quote $B$NFbIt$KBgJ8;z$G$O$8$^$kJQ?t(B($BI>2A$9$k(B)$B$,=q$1$J$$$?$a(B. |
quote $B$NFbIt$KBgJ8;z$G$O$8$^$kJQ?t(B($BI>2A$9$k(B)$B$,=q$1$J$$$?$a(B. |
|
|
/*&usage begin: qt_parenthesis(Qobj) |
begin: qt.parenthesis(Qobj) |
quote object {Qobj} $B$NCf$N3g8L$,B-$j$J$$$H$-$K$OJd$$(B, $BB?$$$H$-$K$O<h$j5n$C$?(B |
quote object {Qobj} $B$NCf$N3g8L$,B-$j$J$$$H$-$K$OJd$$(B, $BB?$$$H$-$K$O<h$j5n$C$?(B |
quote object $B$r:n$k(B. |
quote object $B$r:n$k(B. |
+, *, /, ^, - $BEy$K$D$$$F(B asir $B$NJ8K!$G$N1i;;;R$N6/$5$r2>Dj$9$k(B. |
+, *, /, ^, - $BEy$K$D$$$F(B asir $B$NJ8K!$G$N1i;;;R$N6/$5$r2>Dj$9$k(B. |
end: */ |
description: |
|
$B;29M(B; |
|
@itemize |
|
@item $B$^$@=q$$$F$J$$(B. |
|
@item noro_simplify.rr $B$N(B @code{noro_simplify.remove_paren()} |
|
$B$,$9$G$K<B8=$E$_(B? |
|
($B2C$($kJ}$O$@$a$_$?$$(B) |
|
@code{flatten()} $B$d(B @code{quote_to_funargs()} $B$rMxMQ$7$F$kLOMM(B. |
|
@item $B<B83E*4X?t%^%K%e%"%k$N(B @code{quote_flatten} $B$b;2>H(B ($B$3$N4X?t$J$$(B). |
|
@end itemize |
|
|
/*&usage begin: qt_eval(Qobj,type) |
end: |
|
|
|
begin: qt.eval(Qobj,type) |
Qobj $B$r(B asir $B$NB>$N(B object $B$KJQ49(B. |
Qobj $B$r(B asir $B$NB>$N(B object $B$KJQ49(B. |
end: */ |
description: |
|
@code{eval_quote()} $B$,$9$G$K<B8=$E$_(B. |
|
$B<BAu$7$F$J$$(B. |
|
|
/*&usage begin: qt_(Obj) |
end: |
|
|
|
begin: qt.qt(Obj) |
asir $B$N(B Obj $B$r(B quote $B7?$KJQ49(B. |
asir $B$N(B Obj $B$r(B quote $B7?$KJQ49(B. |
end: */ |
description: |
|
@code{objtoquote()} $B$,$9$G$K<B8=$E$_(B. $B<BAu$7$F$J$$(B. |
|
|
|
end: |
|
|
|
begin: qt.cancel_number(Q) |
|
Quote {Q} $B$NCf$GM-M}?t$,$"$l$PDLJ,$9$k(B. |
|
ref: qt.is_rational |
|
end: |
|
|
|
begin: qt.add_paren(Q) |
|
+- $B$,$"$l$P(B ( ) $B$r2C$($k(B. $B$^$@(B bug $B$$$j(B. |
|
description: Taylor $BE83+$r7W;;$9$k$?$a$K:n$C$?(B. |
|
end: |
|
|
|
begin: qt.add_paren0(Q) |
|
$BL5>r7o$K(B {Q} $B$r(B ( ) $B$9$k(B. |
|
end: |
|
|
|
|
|
begin: qt003| |
@c -------------------------------------------------------------------- |
@c -------------------------------------------------------------------- |
@section tr (term rewriting) $B$N%H%C%W%l%Y%k$N4X?t(B |
@section tr $B$=$NB>(B |
|
end: |
|
|
/*&usage begin: tr_match0(Qobj,P) |
begin: qt.vars(Q) |
|
{Q} $B$K8=$l$kJQ?t$rLa$9(B. |
|
description: @code{vars(Obj)} $B$N(B qt $BHG(B. |
|
example: |
|
[2306] qt.vars(objtoquote((x-y-1)^4/z+y^q)); |
|
[x,y,z,q] |
|
end: |
|
|
|
begin: qt.etov_pair(Q) |
|
{Q} $B$K(B p^q $B$N7A$N85$rC5$7$F(B [p,q] $B$r%j%9%H$K$7$FLa$9(B. |
|
description: |
|
@itemize @bullet |
|
@item @code{dp_etov} $B$NN`;w$r:n$k$?$a$N=`Hw(B(2005/05/04). |
|
@end itemize |
|
example: |
|
[2410] ctrl("print_quote",1); |
|
1 |
|
[2411] qt.etov_pair(quote(3*x^4*y^(-3))); |
|
[[[internal,y],[u_op,(),[u_op,-,[internal,3]]]],[[internal,x],[internal,4]]] |
|
end: |
|
|
|
begin: tr| |
|
|
|
@c -------------------------------------------------------------------- |
|
@section tr (term rewriting) $B$N%H%C%W%l%Y%k$N4X?t(B (module tr $B$N4X?t(B) |
|
|
|
end: |
|
|
|
begin: tr.match0(Qobj,P) |
quote $B%G!<%?(B {Qobj} $B$,(B $B%Q%?!<%s(B {P} $B$KE,9g$9$l$P(B 1 $B$rLa$7(B, $B$=$&$G$J$1$l$P(B 0 |
quote $B%G!<%?(B {Qobj} $B$,(B $B%Q%?!<%s(B {P} $B$KE,9g$9$l$P(B 1 $B$rLa$7(B, $B$=$&$G$J$1$l$P(B 0 |
$B$rLa$9(B. |
$B$rLa$9(B. |
example: tr_match0(quote(1+2*3),quote(pn(x)+pn(y))) |
example: tr.match0(quote(1+2*3),quote(pn(x)+pn(y))) |
x $B$K(B quote(1), y $B$K(B quote(2*3) |
x $B$K(B quote(1), y $B$K(B quote(2*3) |
tr_match0(quote(1+2*3),quote(pn(x)+pn(y,qt_is_integer,y))) |
tr.match0(quote(1+2*3),quote(pn(x)+pn(y,"qt.is_integer",y))) |
qt_is_integer(2*3) $B$O(B 0 $B$J$N$G(B y $B$K$O%^%C%A$7$J$$(B. |
qt.is_integer(2*3) $B$O(B 0 $B$J$N$G(B y $B$K$O%^%C%A$7$J$$(B. |
end: */ |
end: |
|
|
pn(x) $B$OG$0U$N(B quote object $B$K%^%C%A$7(B, $BL>A0(B x $B$r$D$1$k(B. |
begin: pn(X) |
tr_match0(quote(1+2*3),quote(pn(x)+pn(y))) $B$O(B 1 $B$rLa$9$,(B, |
pn(x) $B$OG$0U$N(B quote object $B$K%^%C%A$7(B, $BL>A0(B x $B$r$D$1$k(B. |
tr_match0(quote(1+2*3),quote(pn(x)+pn(y,tr_is_integer,x))) $B$O(B 0 $B$r$b$I$9(B. |
description: |
2*3 $B$O(B integer $B$+$i:n$i$l$?(B fnode $B$G$O$"$k$,(B integer $B$G$O$J$$$N$G(B qt_is_integer |
tr.match0(quote(1+2*3),quote(pn(x)+pn(y))) $B$O(B 1 $B$rLa$9$,(B, |
$B$,(B 0 $B$rLa$9$?$a(B. |
tr.match0(quote(1+2*3),quote(pn(x)+pn(y,tr.is_integer,x))) $B$O(B 0 $B$r$b$I$9(B. |
|
2*3 $B$O(B integer $B$+$i:n$i$l$?(B fnode $B$G$O$"$k$,(B integer $B$G$O$J$$$N$G(B qt.is_integer |
|
$B$,(B 0 $B$rLa$9$?$a(B. |
|
end: |
|
|
/*&usage begin: tr_match_act(Qobj,P,Act) |
begin: tr.match0_act(Qobj,P,Act) |
quote $B%G!<%?(B {Qobj} $B$,(B $B%Q%?!<%s(B {P} $B$KE,9g$9$l$P(B {Act} $B$r8F$S=P$7$=$NCM$rLa$9(B. |
quote $B%G!<%?(B {Qobj} $B$,(B $B%Q%?!<%s(B {P} $B$KE,9g$9$l$P(B {Act} $B$r8F$S=P$7$=$NCM$rLa$9(B. |
$B%Q%?!<%s(B {P} $B$K%^%C%A$7$J$$$H$-$O(B 0. |
$B%Q%?!<%s(B {P} $B$K%^%C%A$7$J$$$H$-$O(B 0. |
|
|
example: tr_match_act(quote(1+2*3),quote(pn(x)+pn(y)),[myadd,x,y]) |
example: tr.match0_act(quote(1+2*3),quote(pn(x)+pn(y)),[myadd,x,y]) |
end: */ |
end: |
|
|
/*&usage begin: tr_or_match1(Qobj,Rules) |
begin: tr.or_match0_act(Qobj,Rules) |
end: */ |
end: |
|
|
/*&usage begin: tr_apply_rule1(Qobj,P,Act) |
begin: tr.apply_rule1(Qobj,P,Act) |
quote $B%G!<%?(B {Qobj} $B$NLZ$rI}M%@hC5:w$7(B, |
quote $B%G!<%?(B {Qobj} $B$NLZ$rI}M%@hC5:w$7(B, |
$B%Q%?!<%s(B {P} $B$KE,9g$9$k$b$N$,$"$k$H$-$O(B {Act} $B$r8F$S=P$7$=$NCM$rLa$9(B. |
$B%Q%?!<%s(B {P} $B$KE,9g$9$k$b$N$,$"$k$H$-$O(B {Act} $B$r8F$S=P$7$=$NCM$rLa$9(B. |
$B$D$^$j(B top node $B$,(B {P} $B$KE,9g$9$k$+D4$Y(B, $BE,9g$7$J$$>l9g$O$=$N;R6!$K(B |
$B$D$^$j(B top node $B$,(B {P} $B$KE,9g$9$k$+D4$Y(B, $BE,9g$7$J$$>l9g$O$=$N;R6!$K(B |
tr_apply_rule1 $B$rE,MQ$9$k(B ($B$3$3$,(B tr_match_act $B$H$O0[$J$k(B). |
tr.apply_rule1 $B$rE,MQ$9$k(B ($B$3$3$,(B tr.match_act $B$H$O0[$J$k(B). |
$B%^%C%A$7$J$$>l9g$O(B Qobj $B$r$=$N$^$^La$9(B ($B$3$l$,:F5"E*$KE,MQ$5$l$k(B). |
$B%^%C%A$7$J$$>l9g$O(B Qobj $B$r$=$N$^$^La$9(B ($B$3$l$,:F5"E*$KE,MQ$5$l$k(B). |
|
|
example: tr_apply_rule1(quote(1+sin(2*@pi)),quote(sin(pn(x)*@pi)),[sin_int,x]) |
description: |
end: */ |
|
|
|
$B$3$3$G(B sin_int(X) $B$O(B X $B$,(B integer $B$N;~$O(B quote(0) $B$rLa$7(B, |
$B$3$3$G(B sin_int(X) $B$O(B X $B$,(B integer $B$N;~$O(B quote(0) $B$rLa$7(B, |
$B$=$&$G$J$$$H$-$O(B quote(sin(X*@pi)) $B$rLa$9(B. |
$B$=$&$G$J$$$H$-$O(B quote(sin(X*@@pi)) $B$rLa$9(B. |
$B?<$5M%@h$G=q$-49$($r$9$k$K$O(B $B4X?t(B sin_int $B$NCf$G$^$?(B tr_apply_rule1 $B$r8F$S=P$;$P(B |
$B?<$5M%@h$G=q$-49$($r$9$k$K$O(B $B4X?t(B sin_int $B$NCf$G$^$?(B tr.apply_rule1 $B$r8F$S=P$;$P(B |
$B$h$$(B. |
$B$h$$(B. |
|
|
/*&usage begin: tr_apply_or_rules(Qobj,Rules) |
example: tr.apply_rule1(quote(1+sin(2*@pi)),quote(sin(pn(x)*@pi)),[sin_int,x]) |
end: */ |
end: |
|
|
@subsection $BFbIt4X?t(B |
|
|
|
/*&usage begin: tr_apply_function0(Qobj,BindingTable) |
begin: tr.apply_or_rules(Qobj,Rules) |
end: */ |
quote $B%G!<%?(B {Qobj} $B$NLZ$rI}M%@hC5:w$7(B, |
|
$B%k!<%k(B {Rules} $B$KE,9g$9$k$b$N$,$"$k$H$-$O%k!<%k$K5-=R$5$l$?(B action $B$r(B |
|
$B8F$S=P$9(B. {Rules} $B$K$OJ#?t$N%k!<%k$r=q$/$3$H$,0l$D$G$bE,MQ2DG=$J%k!<%k$,(B |
|
$B$"$l$P:F5"E*$K8F$S=P$5$l$k(B. |
|
|
/*&usage begin: tr_rp(Qobj,P,A) |
end: |
end: */ |
|
|
|
/*&usage begin: tr_make_binding(Qobj,P) |
begin: hoge4| |
end: */ |
@section tr $BFbIt4X?t(B |
|
end: |
|
|
@c --------------------------------------------------------- |
begin: tr.apply_function0(Qobj,BindingTable) |
@section $BJQ?t%Q%?!<%s$H4X?t%Q%?!<%s(B |
end: |
|
|
$BNc(B: |
begin: tr.rp(Qobj,P,A) |
pn(x) $BG$0U$N$b$N$K%^%C%A(B. $B%^%C%A$7$?$b$N$r(B x $B$K(B bind. |
end: |
pn(x,qt_is_integer(x)) |
|
fn(f) $BG$0U$N4X?t$K%^%C%A(B. $B%^%C%A$7$?4X?tL>$r(B f $B$K(B bind. |
|
fn(f,pn(x),pn(y)) $BG$0U$N4X?t$K%^%C%A(B. $B%^%C%A$7$?4X?tL>$r(B f $B$K(B bind. |
|
f $B$N0z?t$r(B x, y $B$K(B bind |
|
|
|
@c --------------------------------------------------------- |
begin: tr.make_binding(Qobj,P) |
@section $B%Q%?!<%s(B |
end: |
|
|
$B%Q%?!<%s$O(B quote $B$GM?$($k(B. |
|
$BM=Ls8l(B tr_and, tr_or, tr_not $B$O%Q%?!<%s$N%^%C%A$K4X$7$FO@M}1i;;$r$*$3$J$&(B. |
|
$B$?$H$($P(B |
|
quote(tr_and(pn(x,qt_is_integer),pn(x,qt_is_non_negative(x)))) |
|
$B$O(B x $B$,(B $B@0?t$G(B - $B$,@hF,$K$D$$$F$$$J$$>l9g%^%C%A$9$k(B. |
|
|
|
@c --------------------------------------------------------- |
begin: zzz00| |
@section $BNcBj(B sin($B@0?t(B*@pi) $B$r(B 0 $B$K(B. |
|
|
|
|
@section $BNcBj(B |
|
|
|
end: |
|
|
|
begin: zzz01| |
|
$BNcBj(B sin($B@0?t(B*@@pi) $B$r(B 0 $B$K(B. |
|
example: |
/* $B=`Hw(B */ |
/* $B=`Hw(B */ |
extern P,A; |
extern P,A; |
P=quote(sin(pn(x)*@pi)); /* $B%Q%?!<%s(B */ |
P=quote(sin(pn(x)*@pi)); /* $B%Q%?!<%s(B */ |
A=[sin_int,x] /* action, action $B4X?t(B */ |
A=[sin_int,x] /* action, action $B4X?t(B */ |
def sin_int(X) { |
def sin_int(X) { |
X = tr_apply_rule1(X,P,A); /* $B;R6!$K(B [P,A] $B$r:F5"E*$KE,MQ(B */ |
X = tr.apply_rule1(X,P,A); /* $B;R6!$K(B [P,A] $B$r:F5"E*$KE,MQ(B */ |
if (qt_is_integer(X)) return qt_zero(); |
if (qt.is_integer(X)) return qt.zero(); |
else qt_replace(sin(y*@pi),[[y,X]]); /* sin(x*@pi) $B$r$=$N$^$^La$9(B.*/ |
else qt.replace(sin(y*@pi),[[y,X]]); /* sin(x*@pi) $B$r$=$N$^$^La$9(B.*/ |
} |
} |
|
|
/* $B7W;;(B */ |
/* $B7W;;(B */ |
Qobj=quote(1+sin(sin(2*@pi)*@pi)*sin((1/2)*@pi)); |
Qobj=quote(1+sin(sin(2*@pi)*@pi)*sin((1/2)*@pi)); |
tr_apply_rule1(Qobj,P,A); |
tr.apply_rule1(Qobj,P,A); |
|
end: |
|
|
|
@c ------------------------------------------------------ |
|
@section $BNcBj(B Mathematica $B$N(B N[ ] $BAjEv$N4X?t$r%f!<%6$,=q$1$k$h$&$K(B. |
|
|
|
begin: zzz02| |
|
$BNcBj(B Mathematica $B$N(B N[ ] $BAjEv$N4X?t$r%f!<%6$,=q$1$k$h$&$K(B. |
|
example: |
|
nn(sin(cos(@pi)+sqrt(2))) |
|
--> nn(sin(nn(cos(nn(@pi)))+nn(sqrt(nn(2))))) |
|
Prog; test1-tr.rr $B$N(B test4(). |
|
|
|
qt.map_arg $B4X?t$rMQ$$$k(B. |
|
def test4() { |
|
Rule=[quote(nn(pn(f))),["qt.map_arg",nn,f]]; |
|
/* nn $B$G0O$^$l$?$b$N$,$"$l$P(B, nn $B$r$=$NFbIt$K:F5"E*$K(B apply $B$9$k(B */ |
|
R0 = quote(nn(sin(1/2)*cos(1/3))); |
|
print(print_input_form(R0)); |
|
R=tr.apply_rule1(R0,Rule[0],Rule[1]); |
|
return R; |
|
} |
|
|
|
end: |
|
|
@c --------------------------------------------------------- |
@c --------------------------------------------------------- |
@section $BNcBj(B $BITDj@QJ,(B |
@section $BNcBj(B $BITDj@QJ,(B |
|
|
|
begin: zzz03| |
|
$BNcBj(B $BITDj@QJ,(B |
|
example: |
/* integral(f+g) => integral(f)+integral(g) */ |
/* integral(f+g) => integral(f)+integral(g) */ |
S1=[quote(integral(pn(f)+pn(g))), |
S1=[quote(integral(pn(f)+pn(g))), |
[int_linear1,f,g]]; |
[int_linear1,f,g]]; |
def int_linear1(X,Y) { |
def int_linear1(X,Y) { |
return qt_replace(quote(integral(f)+integral(g)),[[f,X],[g,Y]]); |
return qt.replace(quote(integral(f)+integral(g)),[[f,X],[g,Y]]); |
} |
} |
|
|
/* integral(c*f) => c*integral(f) */ |
/* integral(c*f) => c*integral(f) */ |
def qt_independent(F,X) { return !qt_dependent(F,X); } |
def qt.independent(F,X) { return !qt.dependent(F,X); } |
S2=[quote(integral(pn(c,qt_independent(c,x))*f)), |
S2=[quote(integral(pn(c,"qt.independent",c,x))*f)), |
[int_linear2,c,f]]; |
[int_linear2,c,f]]; |
def int_linear2(X,Y) { |
def int_linear2(X,Y) { |
return qt_replace(quote(c*integral(f)),[[c,X],[f,Y]]); |
return qt.replace(quote(c*integral(f)),[[c,X],[f,Y]]); |
} |
} |
|
|
apply_or_rules(quote(integral(a*x^2+x+2/x)),[S1,S2]); |
apply_or_rules(quote(integral(a*x^2+x+2/x)),[S1,S2]); |
Line 195 quote(tr_and(pn(x,qt_is_integer),pn(x,qt_is_non_negati |
|
Line 360 quote(tr_and(pn(x,qt_is_integer),pn(x,qt_is_non_negati |
|
a*integral(x^2)+integral(x)+integral(2/x); |
a*integral(x^2)+integral(x)+integral(2/x); |
|
|
quote(integral(x^pn(n))) --> x^(n+1)/(n+1) or log(x) $B$r=q$/(B. |
quote(integral(x^pn(n))) --> x^(n+1)/(n+1) or log(x) $B$r=q$/(B. |
|
end: |
|
|
@c --------------------------------------------------------- |
@c --------------------------------------------------------- |
@section $BNcBj(B $B4JC1$J9=J82r@O(B |
@section $BNcBj(B $B4JC1$J9=J82r@O(B |
|
|
|
begin: zzz04|sortKey: zzz04 |
|
description: |
|
|
|
$BNcBj(B $B4JC1$J9=J82r@O(B |
|
|
|
example: |
$B<0(B(expression) $B$O(B $B<0(B+$B<0(B | $B<0(B*$B<0(B | ($B<0(B) | $B@0?t(B |
$B<0(B(expression) $B$O(B $B<0(B+$B<0(B | $B<0(B*$B<0(B | ($B<0(B) | $B@0?t(B |
|
|
extern R1,R2,R3,R4,S1,S2,S3,S4; |
extern R1,R2,R3,R4,S1,S2,S3,S4; |
Line 206 quote(tr_and(pn(x,qt_is_integer),pn(x,qt_is_non_negati |
|
Line 378 quote(tr_and(pn(x,qt_is_integer),pn(x,qt_is_non_negati |
|
R1=[quote(pn(x,is_expression(x))+pn(y,is_expression(y))), 1]; |
R1=[quote(pn(x,is_expression(x))+pn(y,is_expression(y))), 1]; |
R2=[quote(pn(x,is_expression(x))*pn(y,is_expression(y))), 1]; |
R2=[quote(pn(x,is_expression(x))*pn(y,is_expression(y))), 1]; |
R3=[quote((pn(x,is_expression(x)))), 1]; |
R3=[quote((pn(x,is_expression(x)))), 1]; |
R4=[quote(pn(x,qt_is_integer(x))), 1]; |
R4=[quote(pn(x,qt.is_integer(x))), 1]; |
def is_expression(Qobj) { |
def is_expression(Qobj) { |
R = [R1,R2,R3,R4]; |
R = [R1,R2,R3,R4]; |
A = apply_or_match0(Qobj,R); |
A = apply_or_match0(Qobj,R); |
Line 216 quote(tr_and(pn(x,qt_is_integer),pn(x,qt_is_non_negati |
|
Line 388 quote(tr_and(pn(x,qt_is_integer),pn(x,qt_is_non_negati |
|
/* $B7W;;MQ(B. R1,R2,R3,R4 $B$H:8$O6&DL(B. */ |
/* $B7W;;MQ(B. R1,R2,R3,R4 $B$H:8$O6&DL(B. */ |
S1=[quote(pn(x,is_expression(x))+pn(y,is_expression(y))), [myadd,x,y]]; |
S1=[quote(pn(x,is_expression(x))+pn(y,is_expression(y))), [myadd,x,y]]; |
S2=[quote(pn(x,is_expression(x))*pn(y,is_expression(y))), [mymul,x,y]]; |
S2=[quote(pn(x,is_expression(x))*pn(y,is_expression(y))), [mymul,x,y]]; |
S3=[quote((pn(x,is_expression(x)))), [qt_id,x]]; |
S3=[quote((pn(x,is_expression(x)))), ["qt.id",x]]; |
S4=[quote(pn(x,qt_is_integer(x))), [qt_id,x]]; |
S4=[quote(pn(x,qt.is_integer(x))), ["qt.id",x]]; |
|
|
def eval_expression(Qobj) { |
def eval_expression(Qobj) { |
S = [S1,S2,S3,S4]; |
S = [S1,S2,S3,S4]; |
Line 225 quote(tr_and(pn(x,qt_is_integer),pn(x,qt_is_non_negati |
|
Line 397 quote(tr_and(pn(x,qt_is_integer),pn(x,qt_is_non_negati |
|
} |
} |
|
|
def myadd(X,Y) { |
def myadd(X,Y) { |
return qt_(qt_eval(X,1)+qt_eval(Y,1)); |
return qt.qt(qt.eval(X,1)+qt.eval(Y,1)); |
} |
} |
|
|
def mymul(X,Y) { |
def mymul(X,Y) { |
return qt_(qt_eval(X,1)*qt_eval(Y,1)); |
return qt.qt(qt.eval(X,1)*qt.eval(Y,1)); |
} |
} |
|
|
/* $B7W;;(B */ |
/* $B7W;;(B */ |
tr_eval_expression(quote(1+2*(3+15))); |
tr.eval_expression(quote(1+2*(3+15))); |
|
end: |
|
|
@c --------------------------------------------------------- |
begin: misc| |
@section $BNcBj(B $BHs2D494D$N4JC1$J9=J82r@O(B |
|
|
|
|
@section $B9M$(J}$K$D$$$F$N35@b(B |
|
|
|
$B%H%C%W%l%Y%k$N4X?tC#(B. (stylesheet $B$N9M$($K;w$F$k(B.) |
|
|
@section Todo: |
iterator $B$N0l<o(B. |
$BNc(B. Mathematica $B$N(B N[ ] $BAjEv$N4X?t$r%f!<%6$,=q$1$k$h$&$K(B. |
|
nn(sin(cos(@pi)+sqrt(2))) |
|
--> nn(sin(nn(cos(nn(@pi)))+nn(sqrt(nn(2))))) |
|
$BG$0U4X?t$H$N(B match. |
|
|
|
$BNc(B: $BQQ5i?t$N7W;;$r(B quote $B$G<B8=(B. |
yacc $B$K;w$F$k(B. |
|
|
|
@section $B%G%P%C%,!<(B |
|
|
|
$BA*Br$9$Y$-%k!<%k$,Bt;3$"$k$H$-$O(B, $B7Y9p$9$k5!G=(B. |
|
|
|
$BL58B%k!<%W$N(B|$B8!=P(B. |
|
|
|
end: |
|
|
|
begin: exp| |
|
|
|
@c ------------------------------------------------ |
|
@section $B<B83E*4X?t(B |
|
|
|
end: |
|
|
|
begin: qt.map_arg(F,Q) |
|
$B4X?t(B F $B$r(B quote $B%G!<%?(B {Q} $B$N(B $B$9$Y$F$N%N!<%I$K:F5"E*$K(B |
|
apply $B$7$?(B quote $B%G!<%?$rLa$9(B. |
|
example: qt.map_arg(nn,quote(sin(@pi)+2/3)) |
|
nn(nn(sin(nn(@pi)))+nn(nn(2)/nn(3))) |
|
end: |
|
|
|
begin: todo| |
|
|
|
@section Todo |
|
|
|
@subsection $B%f!<%6Dj5A$NCfCV1i;;;R(B |
|
|
|
tfb $B$N=q$-J}$rF3F~(B. |
|
|
|
@subsection $B?t3X$h$j$NNcBj(B |
|
|
|
$B?t3XE*$K$*$b$7$m$$NcBj$r$J$k$Y$/Bt;3MQ0U$9$k(B. |
|
$B$3$l$i$NNcBj$KBP$7$F(B tr $B$,;n:nIJ$r:n$k$N$KM-8z$G$"$k$H$$$&$3$H$r$$$&(B. |
|
|
|
$BNc(B; gcd $B7W;;$NB?9`<0(B reduction $B$r(B tr $B$G<B8=(B. |
|
|
|
$BNc(B; $BQQ5i?t$N7W;;$r(B quote $B$G<B8=(B. |
sort $B$d(B expand $B$OAH$_9~$_$G(B. |
sort $B$d(B expand $B$OAH$_9~$_$G(B. |
|
|
$BNc(B: Mathematica $B$N(B Expand[], Toghether[] $BAjEv$N$b$N(B. |
$BNc(B; Mathematica $B$N(B Expand[], Toghether[] $BAjEv$N$b$N(B. |
|
|
$BNc(B: D $B$N3]$1;;$r(B $B%Q%?!<%s%^%C%A$G<B8=(B. |
$BNc(B; D $B$N3]$1;;$r(B $B%Q%?!<%s%^%C%A$G<B8=(B. |
|
holonomic $B4X?t$r78?t$H$9$kHyJ,:nMQAG4D$G$N7W;;(B. |
|
|
$BNc(B: (x^(1/n))^n --> x $BEy(B. |
$BNc(B; (x^(1/n))^n --> x $BEy(B. |
|
|
$BNc(B: $B5-9fHyJ,$HHyJ,4D$G$N7W;;(B. |
$BNc(B; $B5-9fHyJ,$HHyJ,4D$G$N7W;;(B. |
y''+xy=0, y''=y^2+x $BEy(B. |
y''+xy=0, y''=y^2+x $BEy(B. index $BIU$-$NJQ?t@8@.$,I,MW(B. idxtov |
|
|
$BNc(B: QE, $BO@M}<0(B. |
$BNc(B; QE, $BO@M}<0(B. |
|
|
@section $B9M$(J}$K$D$$$F$N35@b(B |
$BNc(B; $B30@QBe?t(B. |
|
|
$B%H%C%W%l%Y%k$N4X?tC#(B. (stylesheet $B$N9M$($K;w$F$k(B.) |
$BNc(B; $B4dGH(B, $B1~MQ?t3X(B, $B?@J]$N%=%j%H%s$NK\$K$"$k$h$&$J(B fermion $BEy$NNc(B. |
iterator $B$N0l<o(B. |
|
|
|
@c ------------------------------------------------ |
|
|
$BNc(B; |
|
Bergman, George M. |
|
The diamond lemma for ring theory. |
|
Advances in Math. 29 (1978), no. 2, 178--218. |
|
$B$K$"$k$h$&$JHs2D49Be?t$NNc(B. |
|
|
|
end: |
|
|
|
begin: new-functions| |
|
|
@section $B$^$@%9%1%C%A$N$_$N4X?t;EMM(B |
@section $B$^$@%9%1%C%A$N$_$N4X?t;EMM(B |
|
|
qt_ltor, qt_rtol : $BLZ$N9=B$$NJQ49(B; $BNc(B (x*y)*z --> x*(y*z) |
qt.ltor, qt.rtol ; $BLZ$N9=B$$NJQ49(B; $BNc(B (x*y)*z --> x*(y*z) |
|
|
idxtov(x,i) x_i $B$r@8@.(B. x_i $B$N(B index (idx) $BB0@-(B $B$r(B i $B$K(B. |
end: |
base_name $BB0@-$r(B x $B$K(B. |
|
idxtov(x,[i,j]) x_i_j $B$r@8@.(B. x_i_i $B$N(B index (idx) $BB0@-(B $B$r(B [i,j] $B$K(B. |
|
vtoidx(x_i) $B$O(B i $B$rLa$9(B. $BB0@-$N8!:w$J$N$G9bB.(B. idx $BB0@-$,L5$$>l9g$O(B i $B$r@_Dj(B. |
|
|
|
idxtov $B4X?t$O(B $B4X?tL>$K$b;H$($k$h$&$K$9$k(B --> $BHyJ,4DBP1~(B. |
begin: idx| |
|
|
qt_function($BL>A0(B, $B0z?t(B) --> quote($BL>A0(B($B0z?t(B)) $B$r@8@.(B. |
@subsection Index $B$D$-JQ?t(B |
|
|
|
end: |
|
|
|
begin: idxtov(X,I) |
|
idxtov({X},{I}) $B$OJQ?t(B {X}_{I} $B$rLa$9(B. |
|
{I} $B$O%9%+%i!<$+%j%9%H(B. |
|
example: |
|
idxtov(x,i) $B$O(B x_i $B$rLa$9(B. |
|
description: |
|
idxtov(x,[i,j]) $B$O(B x_i_j $B$r@8@.(B. x_i_i $B$N(B index (idx) $BB0@-(B $B$r(B [i,j] $B$K(B. |
|
|
|
@code{util_v()} $B$H$[$\F1$8(B. |
|
|
|
x_i $B$N(B index (idx) $BB0@-(B $B$r(B i $B$K(B. |
|
base_name $BB0@-$r(B x $B$K(B. |
|
$BITDj85$NB0@-$rMxMQ$9$k$3$H$K$h$j9bB.$K(B index $B$r$H$j$@$;$F(B index $B$D$-JQ?t$N(B |
|
$BBe$j$,$G$-$k(B. |
|
|
|
end: |
|
|
|
begin: vtoidx(X) |
|
vtoidx(x_i) $B$O(B [x,i] $B$rLa$9(B. |
|
description: |
|
@code{util_index()} $B$H$[$\F1MM(B. |
|
|
|
$BB0@-$N8!:w$J$N$G9bB.(B. idx $BB0@-$,L5$$>l9g$O(B i $B$r@_Dj(B. |
|
|
|
idxtov $B4X?t$O(B $B4X?tL>$K$b;H$($k$h$&$K$9$k(B? --> $BHyJ,4DBP1~(B. |
|
|
|
qt.function($BL>A0(B, $B0z?t(B) --> quote($BL>A0(B($B0z?t(B)) $B$r@8@.(B. |
index $BIU$-4X?t$OHyJ,4D$N<h07$KI,MW(B. |
index $BIU$-4X?t$OHyJ,4D$N<h07$KI,MW(B. |
|
end: |
|
|
|
begin: powerSeries| |
|
|
|
@subsection $BQQ5i?t(B, dp $B$N(B pretty print. |
|
|
$B6R5i?t$N<h07(B, dp $B$N(B pretty print $B$N$?$a(B. |
$B6R5i?t$N<h07(B, dp $B$N(B pretty print $B$N$?$a(B. |
qt_qttodp(Qobj | vlist, order?) quote $B$+$i(B dp $B$r:n$k(B. |
qt.qttodp(Qobj | vlist, order?) quote $B$+$i(B dp $B$r:n$k(B. |
exponent $B$,?t$G$J$$$H:n$l$:(B. |
exponent $B$,?t$G$J$$$H:n$l$:(B. |
qt_dptoqt(Qobj | vlist) dp $B$+$i(B quote $B$r:n$k(B. vlist $B$OB0@-$GBP1~(B? |
qt.dptoqt(Qobj | vlist) dp $B$+$i(B quote $B$r:n$k(B. vlist $B$OB0@-$GBP1~(B? |
|
|
qt_expand, qt_sort, qt_ht, qt_rest, qt_mtov $B$b4pAC4X?t$H$7$FM_$7$$(B. |
qt.expand, qt.sort, qt.ht, qt.rest, qt.mtov $B$b4pAC4X?t$H$7$FM_$7$$(B. |
|
|
/*&generate-epilogue |
end: |
*/ |
|
|
begin: MonomialSimplifier| |
|
|
|
@subsection $B%b%N%_%"%k$rI8=`7A$X(B (builtin$B$G(B?) |
|
|
|
example: |
|
x^1 --> x |
|
(x*y)*(z*t) --> x*y*z*t |
|
x*2*y*4 --> 8*x*y ($B;XDj$7$?JQ?t0J30$O2D49$H$9$k(B) |
|
x*x^3 --> x^4 |
|
x*(-y)*z --> -x*y*z |
|
((x)) --> x $B$3$l$O(B noro_simplify.rr noro_simplify.remove_paren() $B$,BP1~(B |
|
|
|
|
|
end: |
|
|
|
4/15 $BLk(B. $B<BAu$OL@F|9V5A$N=`Hw$N=*N;8e$+(B? |
|
begin: qt.gtlex(f,g) |
|
{f} $B$O(B {g} $B$h$j(B quote tree $B$N(B lex order $B$GBg$-$$(B. |
|
description: |
|
quote tree $B$N(B lex order $B$O<!$N$h$&$K7h$a$k(B. |
|
@itemize |
|
@item $BITDj85$OITDj85$N=g=x(B. |
|
@item $BITDj85$h$j(B +, - , *, /, ^ $BEy$N(B node $B$OBg$-$$(B. |
|
$B$?$H$($P(B x < power(x,2) (power(x,2) $B$O(B x^2 $B$N0UL#(B) |
|
@item $B$"$H$O:F5"E*(B. times(x,y) < power(x,y) $B$@$,(B, |
|
times(x,y) $B$H(B times(p,q) $B$O(B x $B$H(B p $B$NHf3S(B, $B$3$l$G$-$^$i$J$$$J$i(B, |
|
y, q $B$NHf3S(B. |
|
@end itemize |
|
|
|
end: |
|
|
|
begin: qt.dtoq(F,V) |
|
$BJ,;6I=8=B?9`<0(B {F} $B$r(B quote $B$KJQ49$9$k(B. |
|
{V} $B$OJQ?t%j%9%H(B. |
|
description: |
|
@itemize @bullet |
|
@item $BJQ?t%j%9%H$,6u$N$H$-$O(B x_1, x_2, ... $B$rMQ$$$k(B. |
|
@item Changelog. 2005/4/21 |
|
@end itemize |
|
example: |
|
F=dp_ptod((x-y-z)^3,[x,y]); |
|
qt.dtoq(F,[]); |
|
quote(x_1^3+(-3)*x_1^2*x_2+3*x_1*x_2^2+(-1)*x_2^3+(-3*z)*x_1^2 |
|
+6*z*x_1*x_2+(-3*z)*x_2^2+3*z^2*x_1+(-3*z^2)*x_2+(-z^3)) |
|
ref: qt.qtod |
|
end: |
|
|
|
begin: qt.qtod(F,V) |
|
quote {F} $B$r(B $BJ,;6I=8=B?9`<0$KJQ49$9$k(B. |
|
{V} $B$OJQ?t%j%9%H(B. |
|
description: |
|
$BJQ?t%j%9%H$,6u$N$H$-$O(B x_1, x_2, ... $B$rMQ$$$k(B. |
|
ref: qt.qtod |
|
end: |