Version française
Home     About     Download     Resources     Contact us    
Browse thread
What on earth is this?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Martin Jambon <martin_jambon@e...>
Subject: Re: [Caml-list] What on earth is this?
On Fri, 11 Nov 2005, Thomas Fischbacher wrote:

> Maybe I just need a good night of sleep, maybe I overlooked something
> really dumb and rather should have asked on the beginner's list. Anyway,
> I find the behaviour demonstrated below quite confusing. Why don't the
> definitions ###_v1 and ###_v2 work? Any idea, anyone?

> let memoized ht f arg = ...
...
> let rec mem_fibonacci_v1 =
>  let mem = Hashtbl.create 10 in
>  memoized mem
>    (fun n -> if n < 2 then 1 else mem_fibonacci_v1 (n-1) +
> mem_fibonacci_v1 (n-2))
> ;;
> (* Error: "This kind of expression is not allowed as right-hand side of `let rec'" *)
>
> let mem_fibonacci_v2 =
>  let mem = Hashtbl.create 10 in
>  let rec mf =
>    memoized mem
>      (fun n -> if n < 2 then 1 else (mf (n-1)) + (mf (n-2)))
>  in mf
> ;;

Almost there. This should work:

let mem_fibonacci_v2 =
   let mem = Hashtbl.create 10 in
   let rec mf arg =
     memoized mem
       (fun n -> if n < 2 then 1 else (mf (n-1)) + (mf (n-2))) arg
   in mf


Martin

--
Martin Jambon, PhD - http://martin.jambon.free.fr
Open Bioinformatics at http://wikiomics.org