リスト関係
とりあえず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)));;