]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/mathql_interpreter/mQIExecute.ml
debian version 0.4.3 (maybe, not tested)
[helm.git] / helm / ocaml / mathql_interpreter / mQIExecute.ml
index 7bd7bd8b9645bf1381ddb486cfcc661fd3c07d08..efb8feb1c7ac7a40d76ad13ce4a5ce368e12b017 100644 (file)
@@ -187,7 +187,7 @@ let execute out m x =
          let f = if b then U.mql_prod else U.set_union in
         let g a s = (fst a, f (snd a) (eval_grp c z)) :: s in
         List.fold_right g (eval_query c x) []
-      | M.Property q0 q1 q2 mc ct cf el pat y ->
+      | M.Property q0 q1 q2 mc ct cfl el pat y ->
         let subj, mct = 
            if q0 then [], (pat, q2 @ mc, eval_val c y)
                  else (q2 @ mc), (pat, [], eval_val c y)  
@@ -197,7 +197,7 @@ let execute out m x =
         in
          let eval_cons (pat, p, y) = (pat, q2 @ p, eval_val c y) in
         let cons_true = mct :: List.map eval_cons ct in
-        let cons_false = List.map eval_cons cf in
+        let cons_false = List.map (List.map eval_cons) cfl in
         let eval_exp (p, po) = (q2 @ p, po) in
         let exp = List.map eval_exp el in
         let t = U.start_time () in
@@ -232,9 +232,10 @@ let execute out m x =
         let keep_av (s, g) = (s, List.fold_right keep_set g []) in
         List.map keep_av (eval_query c x) 
    and eval_grp c = function
-      | M.Attr l ->
+      | M.Attr gs ->
          let attr_aux g (p, y) = U.mql_union g [(p, eval_val c y)] in
-        [List.fold_left attr_aux [] l]
+        let attr_auxs s l = U.set_union s [List.fold_left attr_aux [] l] in
+        List.fold_left attr_auxs [] gs
       | M.From i ->
          try snd (List.assoc i c.avars) 
         with Not_found -> warn (M.AVar i); []