リスト関係

とりあえず2つのリストの和集合?をとる関数。
色々作った。以外にocamlと相性良いかも!

let rec list_uniqufy(lst) = match lst with
	|[]->[]
	|hd::tl -> hd::(List.filter (fun x-> hd<>x) (list_uniqufy tl));;

let list_union(lst1, lst2) = 
	list_uniqufy(lst1@lst2);;

let list_list_sorted(lst) =
	List.map (fun x -> List.sort 
      (fun a b -> if a=b then 0 else if a>b then 1 else ~-1) x)
       lst;;

let list_sorted_union (lst1, lst2) = 
	let slst1 = list_list_sorted(lst1) in
	let slst2 = list_list_sorted(lst2) in
		list_union(slst1, slst2);;

こっちは、直積。ちょくせきっと難しい。

(** リストの直積をとります。fはかけ算関数*)
let  list_product(lst1, lst2, f) = 
	List.flatten (List.map (fun x-> List.map (fun y -> f(x,y)) lst2) lst1);;

(** リストの直積をとって内部リストをソートして最後にuniqufyします*)
let  list_sorted_product(lst1, lst2) = 
	list_uniqufy(list_list_sorted(list_product(lst1,lst2,list_union)));;