(**
 	Module: Aux
	Description: all auxiliary functions
	@author WANG Haisheng	
	Created: 12/08/2013	Modified: 13/08/2013
*)


let array_map = fun f -> fun a ->
  let n = Array.length a in
  Array.init n (fun i -> f a.(i));;

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;;