[BACK]Return to test1-tr.rr CVS log [TXT][DIR] Up to [local] / OpenXM / src / asir-contrib / testing

File: [local] / OpenXM / src / asir-contrib / testing / test1-tr.rr (download)

Revision 1.2, Sat Apr 2 05:56:57 2005 UTC (19 years, 3 months ago) by takayama
Branch: MAIN
Changes since 1.1: +105 -0 lines

The first draft of specifications of
tr_ (term rewriting) and
qt_ (functions for quote).

/* $OpenXM: OpenXM/src/asir-contrib/testing/test1-tr.rr,v 1.2 2005/04/02 05:56:57 takayama Exp $ */
/* $Id: test1-tr.rr,v 1.2 2005/04/02 05:55:37 taka Exp $ */

load("tr.rr")$




def test0() {
  A = quotetolist(quote(1+sin(x)+sin(3*@pi)*sin(0)));
  P = quotetolist(quote(sin(pn("x")*@pi)));
  Q = ["qt_sin_int","x"];
  print(A);
  print(P);
  print(Q);
  print("----------------");
  print(tr_match0(A,P));
  A2 = quotetolist(quote(sin(2*@pi)));
  print(tr_match0(A2,P));
  print("----------------");
  print("---- tr_make_binding --------");
  print(tr_make_binding(A2,P));
  print("-----tr_rp -------------");
  R=tr_rp(A,P,Q);
  print("--------------------");
  print(R);
  print("--------------------");
  return quote_input_form_quote_list(R);
}

def test1()  {
  Rule1=[quote(sin(pn("x")*@pi)),["qt_sin_int","x"]]; /* sin($B@0?t(B*@pi) --> 0 */
  Rule2=[quote(0*pn("y")),       ["qt_zero"]];       /* 0*any --> 0 */
  Rule3=[quote(pn("y")*0),       ["qt_zero"]];       /* any*0 --> 0 */
  Rule4=[quote(pn("y")+0),       ["qt_id","y"]];       /* any+0 --> any */
  Rule5=[quote(0+pn("y")),       ["qt_id","y"]];       /* 0+any --> any */
  Rule6=[quote(sin(0)),          ["qt_zero"]];       /* sin(0) --> 0 */
  R0 = quote(1+sin(sin(2*@pi)*sin(@pi/2))+sin(5*@pi));
  print(print_input_form(R0));
  R=tr_apply_rule1(R0,Rule1[0],Rule1[1]);
  print(print_input_form(R));
  R=tr_apply_rule1(R,Rule2[0],Rule2[1]);
  print(print_input_form(R));
  R=tr_apply_rule1(R,Rule4[0],Rule4[1]);
  print(print_input_form(R));
  R=tr_apply_rule1(R,Rule6[0],Rule6[1]);
  print(print_input_form(R));
  R=tr_apply_rule1(R,Rule4[0],Rule4[1]);
  print(print_input_form(R));
  return R;
}


/* $BITDj@QJ,7W;;$NNc(B  
    c x^n $B$NOB$NITDj@QJ,(B (c $B$O(B x $B$K0MB8$;$:(B)
   $B$$$m$$$m(B $BLdBjE@$"$j(B:  $B$?$H$($P(B c $B$,(B $BL5$$$H$-$N=hM}$G$-$:(B.
*/

/* $B1&JU4X?t(B.  c x^n $B$NITDj@QJ,(B (c $B$O(B x $B$K0MB8$;$:(B)
   Todo: $B1&JU4X?t$rMF0W$K=q$/J}K!(B.
*/
def r_integral0(C,N) {
  NN = eval_str(quote_input_form_quote_list(quotetolist(N)));
  CC = quote_input_form_quote_list(quotetolist(C));
  if (NN == -1) {
     R = "quote("+CC+"*log(x))";
  }else{
     R = "quote("+CC+"/"+rtostr(NN+1)+"*x^"+rtostr(NN+1)+")";
  }
  print("r_integral0:",0);print(R);
  R = eval_str(R);
  return quotetolist(R);
}
/* $B1&JU4X?t(B $B@QJ,$N@~7?@-(B */
def r_int_linear(F,G) {
  FF = quote_input_form_quote_list(quotetolist(F));
  GG = quote_input_form_quote_list(quotetolist(G));
  R = "quote(integral("+FF+")+integral("+GG+"))";
  print("r_int_linear:",0);print(R);
  R = eval_str(R);
  return quotetolist(R);
}
def test3() {
  R0 = quote(1+integral(2*x^(-1)+2*x^2));
  return test3a(R0);
}
def test3a(R0)  {
  Rules=[
     /* c*x^n --> (c/(n+1))*x^(n+1) or c*log(x) */
     [quote(integral(pn("c")*x^pn("n"))),["r_integral0","c","n"]],
     [quote(integral(pn("f")+pn("g"))),  ["r_int_linear","f","g"]]
  ];
  print("Input=",0); print(print_input_form(R0));
  N = length(Rules);
  R = R0;
  for (J=0; J<3; J++) {  /* Todo: $B%U%i%0$,$J$$$N$G(B, $B$H$j$"$($:(B 3 $B2s(B */
    for (I=0; I<N; I++) {
      print(print_input_form(R));
      R=tr_apply_rule1(R,Rules[I][0],Rules[I][1]);
    }
  }
  return R;
}

end$