X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fmathql_interpreter%2Fmqint.ml;fp=helm%2Focaml%2Fmathql_interpreter%2Fmqint.ml;h=2bf4d144ed18994658ff0ec012d8d7c7e7aa986b;hb=7f510b2df638258669d6539861a3f06ed5fab773;hp=c78465aa7c5f315346f9ddfca51a9afde1790f8d;hpb=9f45f8febfade5e1dca7a022154f2635be2af9b2;p=helm.git diff --git a/helm/ocaml/mathql_interpreter/mqint.ml b/helm/ocaml/mathql_interpreter/mqint.ml index c78465aa7..2bf4d144e 100644 --- a/helm/ocaml/mathql_interpreter/mqint.ml +++ b/helm/ocaml/mathql_interpreter/mqint.ml @@ -60,34 +60,37 @@ let fi_to_string fi = *) let init () = Dbconn.init ();; -(* - * esecuzione di una query - * - * parametri: - * q - * - * output: string list list; risultato internto formato da uri + contesto. - *) -let rec execute_ex q = - match q with +(* execute_ex env q *) +(* [env] is the attributed uri environment in which the query [q] *) +(* must be evaluated *) +(* [q] is the query to evaluate *) +(* It returns a [Mathql_semantics.result] *) +let rec execute_ex env = + function MQSelect (apvar, alist, abool) -> - select_ex apvar (execute_ex alist) abool + select_ex env apvar (execute_ex env alist) abool | MQUsedBy (alist, asvar) -> - use_ex (execute_ex alist) asvar "F" (*"refObj"*) + use_ex (execute_ex env alist) asvar "F" (*"refObj"*) | MQUse (alist, asvar) -> - use_ex (execute_ex alist) asvar "B" (*"backPointer"*) + use_ex (execute_ex env alist) asvar "B" (*"backPointer"*) | MQPattern (apreamble, apattern, afragid) -> pattern_ex apreamble apattern afragid | MQUnion (l1, l2) -> - union_ex (execute_ex l1) (execute_ex l2) + union_ex (execute_ex env l1) (execute_ex env l2) +(* | MQDiff (l1, l2) -> - diff_ex (execute_ex l1) (execute_ex l2) + diff_ex (execute_ex env l1) (execute_ex env l2) | MQSortedBy (l, o, f) -> - sortedby_ex (execute_ex l) o f + sortedby_ex (execute_ex env l) o f +*) | MQIntersect (l1, l2) -> - intersect_ex (execute_ex l1) (execute_ex l2) + intersect_ex (execute_ex env l1) (execute_ex env l2) + | MQRVarOccur rvar -> [List.assoc rvar env] ;; +(* Let's initialize the execute in Select, creating a cyclical recursion *) +Select.execute := execute_ex;; + (* * converte il risultato interno di una query (uri + contesto) * in un risultato di sole uri @@ -119,7 +122,7 @@ let rec execute_ex q = * la uri puo' far parte del risultato. *) let xres_to_res l = - let tmp = List.map List.hd (List.tl l) in + let tmp = List.map (function {Mathql_semantics.uri = uri} -> uri) l in MQRefs (List.map (function l -> @@ -178,7 +181,7 @@ let xres_to_res l = *) let execute q = match q with - MQList qq -> xres_to_res (execute_ex qq) + MQList qq -> xres_to_res (execute_ex [] qq) ;; (*