(* Função principal. Subbag = a lista de todas as permutações de todas as sublistas de l. *) open List let rec sublists l = match l with [] -> [[]] x::xs -> let subl = (sublists xs) in subl @ (map (fun l -> x::l) subl) let rec insertions e l = match l with [] -> [[e]] x::xs -> (e::l) :: (map (fun li -> x::li) (insertions e xs)) let rec permutations l = match l with [] -> [[]] x::xs -> flatten (map (fun l -> (insertions x l)) (permutations xs)) let subbag l = sort compare (flatten (map (permutations) (sublists l)));; (** EXERCÍCIO Não será possivel calcular *directamente* a função subbag sem usar todas as funções auxilares precedentes?? Dica: tente reescrever os casos de base (para [], [c], [b;c] etc...) por forma a exibir um padrão facilmente aproveitável. **)
This document was generated using caml2html