Pereira,

The only comment I have is that your dispatch function scans the list
twice (once for odds, once for evens) when it doesn't have to. For
example:

let dispatch xs =
  let rec aux (odds,evens) xs =
    match xs with
      | [] -> odds, evens
      | x :: [] -> x :: odds, evens
      | x :: y :: zs -> aux (x :: odds, y :: evens) zs
  in aux ([],[]) xs

Regards,
Chris

On Thu, Aug 28, 2008 at 8:21 AM, Pereira Lucien
<[EMAIL PROTECTED]> wrote:
>
> Hi,
>
> I'm interested in improve my skills concerning OCaml language. It
> should be nice to give me
> you opinion about this code. Is it optimal ? Do I respect functionnal
> programation style ?
> Do you have another implementation to propose ?
>
> Thanks
>
> (*
>  * return an half list (odd positions)
>  *)
> let rec oddElements list = match list with
>    [] -> []
>  | head::_::tail -> head::(oddElements tail)
>  | head::[] -> head::[]
>
> (*
>  * return an half list (even positions)
>  *)
> let rec evenElements list = match list with
>    [] -> []
>  | _::a::tail -> a::(evenElements tail)
>  | _::[] -> []
>
> (*
>  * Split a list, returns a couple of half list
>  *)
> let dispatch list = (oddElements list, evenElements list)
>
> (*
>  * Merge two sorted list in order to return a sorted list too
>  *)
> let rec merge (list1, list2)  rel = match (list1, list2) with
>    (hd1::tl1, hd2::tl2) ->
>      begin if rel hd1 hd2 <= 0 then hd1::(merge (tl1, list2) rel)
>      else hd2::(merge (list1, tl2) rel)
>      end
>  | ([], _) -> list2
>  | _ -> list1
>
> (*
>  * Ordinary relation function for integers
>  *)
> let relInt a b = if (a < b) then -1 else
>  begin if (a > b) then 1
>  else 0
>  end
>
> (*
>  * The mergeSort itself, It works ! ;)
>  *)
> let rec mergeSort list rel = match list with
>    [] -> []
>  | a::[] -> a::[]
>  | _ -> let (a,b)=dispatch list in
>    let c=mergeSort a rel in
>    let d=mergeSort b rel in merge (c,d) rel
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"ocaml-developer" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/ocaml-developer?hl=en
For other OCaml forums, see http://caml.inria.fr/resources/forums.en.html
-~----------~----~----~----~------~----~------~--~---

Reply via email to