3 * implementazione del comando SELECT
11 * valutazione di una stringa
20 MQName -> func_name (List.assoc rvar l)
35 let rec is_good l abool =
38 (is_good l b1) && (is_good l b2)
40 (is_good l b1) || (is_good l b2)
48 (stringeval s1 l) = (stringeval s2 l)
54 let rec replace avar newval l =
56 MQAnd (b1, b2) -> MQAnd (replace avar newval b1, replace avar newval b2)
57 | MQOr (b1, b2) -> MQOr (replace avar newval b1, replace avar newval b2)
58 | MQNot b1 -> MQNot (replace avar newval b1)
62 MQRVar v when v = avar -> MQRVar newval
63 | MQFunc (f, v) when v = avar -> MQFunc (f, newval)
68 MQRVar v when v = avar -> MQRVar newval
69 | MQFunc (f, v) when v = avar -> MQFunc (f, newval)
74 | _ -> l (* i casi non compresi sono MQTrue e MQFalse *)
77 let rec print_booltree b =
80 let i = print_booltree b1 in
81 let j = print_string " AND " in
84 let i = print_booltree b1 in
85 let j = print_string " OR " in
88 let j = print_string " NOT " in
93 print_string " FALSE "
95 let s1v = match s1 with
101 MQName -> "NAME " ^ rvar
111 and s2v = match s2 with
114 | MQFunc (f, rvar) ->
117 MQName -> "NAME " ^ rvar
128 print_string (s1v ^ " = " ^ s2v)
132 * implementazione del comando SELECT
134 let select_ex avar alist abool =
135 let wrt = replace avar "retVal" abool in
136 (*let j = print_booltree wrt in*)
140 (fun l -> is_good (List.combine (List.hd alist) l) wrt)