(* calcular a lista de todas as listas possíveis que resultam da
    inserção de e em l.  

    val insertions e l : 'a -> 'a list -> 'a list list

    insertions e []      = [[e]]
    insertions e [c]     = [[e;c];[c;e]]
    insertions e [b;c]   = [[e;b;c];[b;e;c];[b;c;e]]
    insertions e [a;b;c] = [[e;a;b;c];[a;e;b;c];[a;b;e;c];[a;b;c;e]]


    logo:          

    insertions e el::li = 
    juntar e::el::li a (el::(todos os elementos de (insertion e li)))
    

 *)
open List


let rec insertions e l = match l with
    []    -> [[e]]
  | x::xs -> (e::l) :: (map (fun li -> x::li) (insertions e xs))
                        

This document was generated using caml2html