X-Git-Url: https://scm.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/1059e1cc0c2ecfa237406949aa26155b6a5b9154..66f23d4fabf89ad09adbd4dfc15ac6b5b2b7da83:/interpreter/aux.ml diff --git a/interpreter/aux.ml b/interpreter/aux.ml new file mode 100644 index 0000000..7c21a61 --- /dev/null +++ b/interpreter/aux.ml @@ -0,0 +1,36 @@ +(** + Module: Aux + Description: all auxiliary functions + @author WANG Haisheng + Created: 12/08/2013 Modified: 13/08/2013 +*) + +let array_map2 = fun f -> fun a -> fun b -> + let n1 = Array.length a in + let n2 = Array.length b in + if n1 = n2 then Array.init n1 (fun i -> f a.(i) b.(i)) + else raise (Invalid_argument "Array.map2 size not matched.");; + +let array_map3 = fun f -> fun a -> fun b -> fun c -> + let n1 = Array.length a in + let n2 = Array.length b in + let n3 = Array.length c in + if n1 = n2 && n1 = n3 then Array.init n1 (fun i -> f a.(i) b.(i) c.(i)) + else raise (Invalid_argument "Array.map3 size not matched.");; + +let decorate = fun s -> " Faustine -> " ^ s;; + +let xor : bool -> bool -> bool = + fun a -> fun b -> (a || b) && (not (a && b));; + +let rint : float -> float = + fun f -> + if (f -. (floor f)) >= 0.5 then ceil f + else floor f;; + +let remainder_float : float -> float -> float = + fun f1 -> fun f2 -> + let r = mod_float f1 f2 in + if (abs_float r) > ((abs_float f2) /. 2.) then + (if r *. f2 > 0. then (r -. f2) else (r +. f2)) + else r;;