version 1.2, 2005/04/02 05:56:57 |
version 1.4, 2005/04/06 09:26:28 |
|
|
/* $OpenXM$ */ |
/* $OpenXM: OpenXM/src/asir-contrib/testing/test1-tr.rr,v 1.3 2005/04/03 11:05:21 takayama Exp $ */ |
/* $Id$ */ |
/* $Id$ */ |
|
|
load("tr.rr")$ |
load("tr.rr")$ |
|
|
R=tr_apply_rule1(R,Rules[I][0],Rules[I][1]); |
R=tr_apply_rule1(R,Rules[I][0],Rules[I][1]); |
} |
} |
} |
} |
|
return R; |
|
} |
|
|
|
|
|
/* 関数のマッチ. N[] 相当. test4(). */ |
|
/* quote(nn(pn(f),qt_is_function(f))); は不要. qt_map_arg が処理 */ |
|
def test4() { |
|
Rule=[quote(nn(pn(f))),[qt_map_arg,nn,f]]; |
|
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; |
|
} |
|
|
|
/* tr_apply_or_rule の試作 */ |
|
|
|
/* Flag 付き の tr_rp. 属性がないのでこれでやる. */ |
|
def tr_rp_flag(F,P,Q) { |
|
Flag = 0; |
|
dprint0("tr_rp, F="); dprint(F); |
|
dprint0("tr_rp, P="); dprint(P); |
|
dprint0("tr_rp, Q="); dprint(Q); |
|
if (tr_match0(F,P)) { |
|
BindTable = tr_make_binding(F,P); |
|
dprint0("BindTable="); dprint(BindTable); |
|
return [1,tr_apply_function0(Q,BindTable)]; |
|
} |
|
if (type(F) != 4) return F; |
|
Node = qt_node(F); |
|
N = qt_nchild(F); |
|
Ans = Node; |
|
for (I=0; I<N; I++) { |
|
T = tr_rp_flag(qt_child(F,I),P,Q); |
|
if (T[0] == 1) Flag = 1; |
|
Ans = append(Ans,[T[1]]); |
|
} |
|
return [Flag,Ans]; |
|
} |
|
|
|
/* 書き換え flag 付きの tr_apply_rule_flag */ |
|
def tr_apply_rule1_flag(Obj,L,R) { |
|
Flag = 0; |
|
dprint("-------- start of tr_apply_rule1_flag ------------ "); |
|
Obj = quotetolist(Obj); |
|
L = quotetolist(L); |
|
R = tr_rp_flag(Obj,L,R); |
|
Flag=R[0]; R=R[1]; |
|
if (type(R) == 17) R=quotetolist(R); |
|
RR = "quote("+listtoquote_str(R)+")"; |
|
dprint("-------- end of tr_apply_rule1_flag ------------ "); |
|
return [Flag,eval_str(RR)]; |
|
} |
|
|
|
def tr_apply_or_rules(Q,R) { |
|
Flag = 1; |
|
N = length(R); |
|
while (Flag) { |
|
Flag = 0; |
|
for (I=0; I<N; I++) { |
|
Q = tr_apply_rule1_flag(Q,R[I][0],R[I][1]); |
|
if (Q[0]) { |
|
Flag = 1; |
|
dprint("Applied the rule "+rtostr(I)); |
|
} |
|
Q = Q[1]; |
|
} |
|
} |
|
return Q; |
|
} |
|
def test5() { |
|
Rule1=[quote(sin(pn(x)*@pi)),[qt_sin_int,x]]; /* sin(整数*@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_flag(R0,Rule1[0],Rule1[1]); |
|
print([R[0],print_input_form(R[1])]); |
|
R=tr_apply_or_rules(R0,[Rule1,Rule2,Rule3,Rule4,Rule5,Rule6]); |
return R; |
return R; |
} |
} |
|
|