let insert_all n lst = let rec insert_all_rec result part = function | [] -> (List.rev (n::part))::result | (h::t) as lst -> let new_lst = (List.rev (n::part)) @ lst in insert_all_rec (new_lst :: result) (h::part) t in insert_all_rec [] [] lst ;; val insert_all : 'a -> 'a list -> 'a list list = <fun> let rec generate_permutation n = match n with | 0 -> [] | 1 -> [[1]] | n -> let list_perm = generate_permutation (n-1) in let list_list_perm = List.map (insert_all n) list_perm in List.flatten list_list_perm ;; val generate_permutation : int -> int list list = <fun> generate_permutation 1 ;; generate_permutation 2 ;; generate_permutation 3 ;; generate_permutation 4 ;;
No comments:
Post a Comment