]> matita.cs.unibo.it Git - helm.git/commitdiff
Fun implemented. new_mathql
authornatile <??>
Thu, 17 Oct 2002 17:55:17 +0000 (17:55 +0000)
committernatile <??>
Thu, 17 Oct 2002 17:55:17 +0000 (17:55 +0000)
helm/ocaml/mathql_interpreter/.depend
helm/ocaml/mathql_interpreter/Makefile
helm/ocaml/mathql_interpreter/func.ml
helm/ocaml/mathql_interpreter/func.mli
helm/ocaml/mathql_interpreter/intersect.mli
helm/ocaml/mathql_interpreter/mqint.ml

index 8106a0f5e6d53359a3ecdeef6ad89af05929093a..72a3dd440c059093fc40a9d469a2c8881013deeb 100644 (file)
@@ -14,6 +14,8 @@ sub.cmo: sub.cmi
 sub.cmx: sub.cmi 
 intersect.cmo: intersect.cmi 
 intersect.cmx: intersect.cmi 
+func.cmo: dbconn.cmi intersect.cmi utility.cmi func.cmi 
+func.cmx: dbconn.cmx intersect.cmx utility.cmx func.cmi 
 mqint.cmo: context.cmo dbconn.cmi diff.cmi intersect.cmi meet.cmi \
     relation.cmi sub.cmi union.cmi mqint.cmi 
 mqint.cmx: context.cmx dbconn.cmx diff.cmx intersect.cmx meet.cmx \
index 7a45ecdf29875251fbd88a3ac7c9b89c813571f0..cd63e8ab4419c522687a9e72ebad40956d373a56 100644 (file)
@@ -2,9 +2,9 @@ PACKAGE = mathql_interpreter
 REQUIRES = helm-urimanager postgres unix helm-mathql
 PREDICATES =
 
-INTERFACE_FILES = dbconn.mli utility.mli union.mli relation.mli diff.mli meet.mli sub.mli intersect.mli mqint.mli
+INTERFACE_FILES = dbconn.mli utility.mli union.mli relation.mli diff.mli meet.mli sub.mli intersect.mli func.mli mqint.mli
 
-IMPLEMENTATION_FILES =  dbconn.ml utility.ml union.ml relation.ml diff.ml meet.ml sub.ml intersect.ml context.ml mqint.ml
+IMPLEMENTATION_FILES =  dbconn.ml utility.ml union.ml relation.ml diff.ml meet.ml sub.ml intersect.ml context.ml func.ml mqint.ml
 
 # $(INTERFACE_FILES:%.mli=%.ml)
 
index 857a4c69813ef015916f301400b4ac9cfc68f3c6..1338af00899bdfd7332cdf2e047d20e23503b0f4 100644 (file)
 
 open Dbconn;;
 open Utility;;
-open MathQL;;
-
-(*
- * implementazione della funzione NAME
- *
- * esempio:
- * name "cic:/Algebra/CC_Props/CC_CauchySeq.ind#xpointer(1/1/1)" = CC_CauchySeq
- *)
-let func_name value =
- try (
-  let i = Str.search_forward (Str.regexp "[^/]*\.") value 0 in
-   let s = Str.matched_string value in 
-    let retVal = Str.string_before s ((String.length s) - 1) in
-     retVal
- ) with
-  Not_found -> ""
-;;
-
-(*
- *
- *)
-let func_theory value =
- ""
-;;
+open Intersect;;
 
 (*
  * implementazione delle funzioni dublin core
  *)
-let func_dc (value, name) =
- let c = pgc ()
- and p = helm_property_id name in
-  pgresult_to_string (c#exec ("select t" ^ p ^ ".att1 from t" ^ p ^ " where " ^ "t" ^ p ^ ".att0 = '" ^ value ^ "'"))
+let rec func_dc tab outv inv = function
+    [] -> []
+  | s::tl -> let res =
+             let c = pgc () in
+            let q = ("select " ^ tab ^ "." ^ outv ^ " from " ^ tab ^ " where " ^ tab ^ "." ^ inv ^ " = '" ^ s ^ "'") in
+             pgresult_to_string_list (c#exec q)
+             in
+             append (res,(func_dc tab outv inv tl))
 ;;
 
 (*
  *
  *)
-let apply_func f value =
+let fun_ex f value =
  match f with
-    MQName         -> func_name value
- |  MQTheory       -> func_theory value
- |  MQTitle        -> func_dc (value, "title")
- |  MQContributor  -> func_dc (value, "contributor")
- |  MQCreator      -> func_dc (value, "creator")
- |  MQPublisher    -> func_dc (value, "publisher")
- |  MQSubject      -> func_dc (value, "subject")
- |  MQDescription  -> func_dc (value, "description")
- |  MQDate         -> func_dc (value, "date")
- |  MQType         -> func_dc (value, "type")
- |  MQFormat       -> func_dc (value, "format")
- |  MQIdentifier   -> func_dc (value, "identifier")
- |  MQLanguage     -> func_dc (value, "language")
- |  MQRelation     -> func_dc (value, "relation")
- |  MQSource       -> func_dc (value, "source")
- |  MQCoverage     -> func_dc (value, "coverage")
- |  MQRights       -> func_dc (value, "rights")
- |  MQInstitution  -> func_dc (value, "institution")
- |  MQContact      -> func_dc (value, "contact")
- |  MQFirstVersion -> func_dc (value, "firstversion")
- |  MQModified     -> func_dc (value, "modified")
+   "name" -> func_dc "names" "name" "uri" value
+ | "reference" -> func_dc "names" "uri" "name" value
+ | _ -> []
 ;;
 
index fb68df82a69bfde4e7060fb874f1adb26a69edb1..2858ce0daffef5739fbff29ad7f3baac52486b1a 100644 (file)
@@ -23,4 +23,4 @@
  * http://cs.unibo.it/helm/.
  *)
 
-val apply_func: MathQL.mqfunc -> string -> string
+val fun_ex: string -> MathQL.value -> MathQL.value
index 956a05922a34c7995be099e5e2ff9748afb76811..5045162b6090ccb9239ebdf64db78173e130a806 100644 (file)
@@ -25,3 +25,6 @@
 
 val intersect_ex :
  MathQL.result -> MathQL.result -> MathQL.result
+
+val append:
+ (string list * string list) -> string list
index c45f9dee8c7c65cd7423d260be848fc6752938c9..f4f7e524195c11f7deb75b3ed3f952e880d382e6 100644 (file)
@@ -41,7 +41,7 @@ open Sub;;
 open Context;;
 open Diff;;
 open Relation;;
-
+open Func;;
 
 let init connection_param = Dbconn.init connection_param 
 
@@ -60,8 +60,8 @@ let get_stat () = ! stat
 (* valuta una MathQL.set_exp e ritorna un MathQL.resource_set *)
 
 let rec exec_set_exp c = function
-   |MathQL.SVar svar -> List.assoc svar c.svars
-   |MathQL.RVar rvar -> [List.assoc rvar c.rvars]  
+     MathQL.SVar svar -> List.assoc svar c.svars
+   | MathQL.RVar rvar -> [List.assoc rvar c.rvars]  
    | MathQL.Ref vexp -> List.map (fun s -> (s,[])) (exec_val_exp c vexp)
    | MathQL.Intersect (sexp1, sexp2) ->    
         let before = Sys.time() in
@@ -134,7 +134,7 @@ let rec exec_set_exp c = function
 (* valuta una MathQL.boole_exp e ritorna un boole *)
 
 and exec_boole_exp c = function
-   | MathQL.False      -> false
+     MathQL.False      -> false
    | MathQL.True       -> true
    | MathQL.Not x      -> not (exec_boole_exp c x)
    | MathQL.And (x, y) -> (exec_boole_exp c x) && (exec_boole_exp c y)
@@ -165,7 +165,7 @@ and exec_boole_exp c = function
 (* valuta una MathQL.val_exp e ritorna un MathQL.value *)
 
 and exec_val_exp c = function
-   | MathQL.Const x -> let
+     MathQL.Const x -> let
         ol = List.sort compare x in 
                        let rec edup = function
                        
@@ -180,7 +180,7 @@ and exec_val_exp c = function
                                  
    | MathQL.VVar s -> List.assoc s c.vvars                               
    | MathQL.RefOf sexp -> List.map (fun (s,_) -> s) (exec_set_exp c sexp)
-   
+   | MathQL.Fun (s, vexp) -> fun_ex s (exec_val_exp c vexp)
    | _ -> assert false