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

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/high-opt/derivative.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/high-opt/derivative.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3519, Sat Dec 19 04:46:58 2015 UTC revision 3520, Sat Dec 19 15:49:06 2015 UTC
# Line 22  Line 22 
22      fun mkDiv (e1, e2) = E.Op2(E.Div, e1, e2)      fun mkDiv (e1, e2) = E.Op2(E.Div, e1, e2)
23      fun mkNeg e = E.Op1(E.Neg, e)      fun mkNeg e = E.Op1(E.Neg, e)
24    
25      fun filterProd args = (case Filter.mkProd args      fun filterProd args = (case EinFilter.mkProd args
26             of SOME e => e             of SOME e => e
27              | NONE => mkProd args              | NONE => mkProd args
28            (* end case *))            (* end case *))
# Line 89  Line 89 
89               of E.Sub => mkSub (inner1, inner2)               of E.Sub => mkSub (inner1, inner2)
90                | E.Div => (case (e1, e2)                | E.Div => (case (e1, e2)
91                     of (_, E.Const e2) => mkDiv (inner1, E.Const e2)                     of (_, E.Const e2) => mkDiv (inner1, E.Const e2)
92                      | (E.Const 1, _) => (case Filter.partitionField [e2]                      | (E.Const 1, _) => (case EinFilter.partitionField [e2]
93                           of (_, []) => zero                           of (_, []) => zero
94                            | (pre, h) => let (* Quotient Rule *)                            | (pre, h) => let (* Quotient Rule *)
95                                val h' = E.Apply(p0, rewriteProd h)                                val h' = E.Apply(p0, rewriteProd h)
# Line 98  Line 98 
98                                  iterDn (mkDiv (num, mkProd (pre @ h @ h)))                                  iterDn (mkDiv (num, mkProd (pre @ h @ h)))
99                                end                                end
100                          (* end case *))                          (* end case *))
101                      | (E.Const c, _) => (case Filter.partitionField [e2]                      | (E.Const c, _) => (case EinFilter.partitionField [e2]
102                           of (_, []) => zero                           of (_, []) => zero
103                            | (pre, h) => let (* Quotient Rule *)                            | (pre, h) => let (* Quotient Rule *)
104                                val h' = E.Apply(p0, rewriteProd h)                                val h' = E.Apply(p0, rewriteProd h)
# Line 107  Line 107 
107                                  iterDn (mkDiv (num, mkProd (pre@h@h)))                                  iterDn (mkDiv (num, mkProd (pre@h@h)))
108                                end                                end
109                          (* end case *))                          (* end case *))
110                      | _ => (case Filter.partitionField [e2]                      | _ => (case EinFilter.partitionField [e2]
111                           of (_, []) => mkDiv (inner1, e2) (* Division by a real *)                           of (_, []) => mkDiv (inner1, e2) (* Division by a real *)
112                            | (pre, h) => let (* Quotient Rule *)                            | (pre, h) => let (* Quotient Rule *)
113                                val g' = inner1                                val g' = inner1
# Line 129  Line 129 
129              case opn              case opn
130               of E.Add => mkAdd (List.map (fn a => E.Apply(E.Partial dx, a)) es)               of E.Add => mkAdd (List.map (fn a => E.Apply(E.Partial dx, a)) es)
131                | E.Prod => let                | E.Prod => let
132                    val (pre, post) = Filter.partitionField es                    val (pre, post) = EinFilter.partitionField es
133                    in                    in
134                      case post                      case post
135                       of [] => E.Const 0 (* no fields in expression *)                       of [] => E.Const 0 (* no fields in expression *)

Legend:
Removed from v.3519  
changed lines
  Added in v.3520

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