Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Annotation of /branches/charisee/src/compiler/ein/equal.sml
ViewVC logotype

Annotation of /branches/charisee/src/compiler/ein/equal.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2496 - (view) (download)

1 : cchiw 2463 (*Test transform function*)
2 :     structure equal = struct
3 :    
4 :     local
5 :     structure E = Ein
6 :     in
7 :    
8 :    
9 :     fun isIndex([],[])=0
10 :     | isIndex(i::ix,j::jx)=if(i=j) then isIndex(ix, jx) else 1
11 :    
12 :     fun isEqual(e1,e2)=(case (e1,e2)
13 :     of (E.Field(id,ix),E.Field(id2,ix2))=> if(id=id2) then isIndex(ix, ix2) else 1
14 :     | (E.Tensor(id,ix),E.Tensor(id2,ix2))=>if(id=id2) then isIndex(ix, ix2) else 1
15 :     | (E.Const c1,E.Const c2) =>
16 :     if(c1>c2) then 1
17 :     else if (c2>c1) then 1
18 :     else 0
19 : cchiw 2496 | (E.Krn(tid,ix,pos),E.Krn (jid,jx,pos2))=>
20 :     if(tid=jid) then isIndex(ix,jx)+ isEqual(pos,pos2)
21 :     else 1
22 : cchiw 2463 | (E.Delta(ix,jx), E.Delta(ix2,jx2))=>isIndex([ix, jx],[ix2, jx2])
23 :     | (E.Epsilon(i,j,k),E.Epsilon(i2,j2,k2))=>
24 :     isIndex([i,j,k], [i2, j2, k2])
25 :     | (E.Neg e1, E.Neg e2)=> isEqual(e1,e2)
26 : cchiw 2496 | (E.Add es, E.Add es2)=>let
27 : cchiw 2463 fun filter([],[])=0
28 :     | filter(a::ax,b::bx)=let
29 :     val v=isEqual(a,b)
30 :     in if(v>0) then 1
31 :     else filter(ax,bx)
32 :     end
33 :     in filter(es, es2)
34 :     end
35 :    
36 :     | (E.Sub(a,b),E.Sub(c,d))=> isEqual(a,c)+isEqual(b,d)
37 :     | (E.Prod es, E.Prod es2)=>let
38 :     fun filter([],[])=0
39 :     | filter(a::ax,b::bx)=let
40 :     val v=isEqual(a,b)
41 :     in if(v>0) then 1
42 :     else filter(ax,bx)
43 :     end
44 :     in filter(es, es2) end
45 :     | (E.Div(a,b), E.Div(c,d))=>isEqual(a,c)+isEqual(b,d)
46 :     | (E.Partial ix, E.Partial jx)=>isIndex(ix,jx)
47 :     | (E.Apply(a,b),E.Apply(c,d))=> isEqual(a,c)+isEqual(b,d)
48 : cchiw 2496 | (E.Conv(fid,alpha,tid,ix),E.Conv(fid2,alpha2,tid2,jx))=>
49 :     if(fid=fid2) andalso (tid=tid2) then
50 :     isIndex(alpha,alpha2)+ isIndex(ix,jx)
51 :     else 0
52 : cchiw 2463 | (E.Probe(a,b),E.Probe(c,d))=> isEqual(a,c)+isEqual(b,d)
53 : cchiw 2496 | (E.Img(id1,ix1,pos1),E.Img (id2,ix2,pos2))=>let
54 : cchiw 2463 fun filter([],[])=0
55 :     | filter(a::ax,b::bx)=let
56 :     val v=isEqual(a,b)
57 :     in if(v>0) then 1
58 :     else filter(ax,bx)
59 :     end
60 : cchiw 2496 in filter(pos1, pos2) end
61 : cchiw 2463 | _ =>1
62 :    
63 :     (*end case*))
64 :    
65 :    
66 :     fun isEinEqual(E.EIN{params, index, body},body2)=isEqual(body,body2)
67 :    
68 :     end; (* local *)
69 :    
70 :     end (* local *)

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0