This site is updated infrequently. For up-to-date information, please visit the new OCaml website at ocaml.org.

functions' recursive construction
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
 Date: 2008-07-07 (20:25) From: Jeremy Yallop Subject: Re: [Caml-list] functions' recursive construction
```Fabrice Marchant wrote:
> On Wed, 23 May 2007 01:17:08 +0200 "Damien Lefortier"
> <damien.lefortier@gmail.com> wrote:
>
>> I try to do a function f which takes one integer argument and
>> returns a function g which returns its nth arguments.
>>
>> For example f 3 gives g with let g = fun x -> fun y -> fun z -> z
>> ;;
>>
>> I tried to do that kind of f function.
>>
>> let rec f = function 1 -> fun x -> x | n -> fun _ -> f (n-1) ;;
>>
>> But it does not work, any idea ?
>
> Sometimes, trying to learn a bit more about OCaml, I dig into old
> List topics. But here, outside Coq answer, I'm not sure to understand
> possible to write an OCaml function that would behave the way Damien
> Lefortier wish ? (I think the answer is 'No') Could you shed light on
> this ?

Here's a rather simple way to do it by encoding all the mechanics in the
integer argument rather than in "f".  Like Jean-Christophe Filliatre in
the original thread, I'll use a zero-based rather than a one-based encoding.

let z v = v
let s n _ = n
let f n = n

Now

f z 0
=> 0

and

f (s (s (s z))) 0 1 2 3
=> 3

and so on.

Jeremy.

```