From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=AWL autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by yquem.inria.fr (Postfix) with ESMTP id B5336BBAF for ; Mon, 7 Jul 2008 22:40:41 +0200 (CEST) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AqMCAMMbckjUnvgHgWdsb2JhbACBW5EBAQEQIAOeIA X-IronPort-AV: E=Sophos;i="4.30,318,1212357600"; d="scan'208";a="12906498" Received: from smtp.dslgb.com (HELO mcr-smtp-001.bulldogdsl.com) ([212.158.248.7]) by mail2-smtp-roc.national.inria.fr with ESMTP; 07 Jul 2008 22:40:41 +0200 Received: by mcr-smtp-001.bulldogdsl.com (Postfix, from userid 1005) id 795C470C66F; Mon, 7 Jul 2008 21:40:40 +0100 (BST) Received: from [192.168.123.191] (host-84-9-233-177.dslgb.com [84.9.233.177]) by mcr-smtp-001.bulldogdsl.com (Postfix) with ESMTP id 1A08C70C2D2; Mon, 7 Jul 2008 21:40:38 +0100 (BST) Message-ID: <48727F44.8010500@ed.ac.uk> Date: Mon, 07 Jul 2008 21:40:36 +0100 From: Jeremy Yallop User-Agent: Mozilla-Thunderbird 2.0.0.14 (X11/20080509) MIME-Version: 1.0 To: Fabrice Marchant Cc: caml-list@yquem.inria.fr Subject: Re: [Caml-list] functions' recursive construction References: <20080707200128.4e125865@free.fr> <20080707202839.272a4b0b@free.fr> In-Reply-To: <20080707202839.272a4b0b@free.fr> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Spam: no; 0.00; recursive:01 coq:01 curried:01 lambda:01 lambda:01 wrote:01 caml-list:01 cond:02 define:02 define:02 off-topic:02 lisp:02 args:05 args:05 scheme:05 Fabrice Marchant wrote: > After Coq, maybe could we program this in Lisp ? Yes, although this is rather off-topic. Here are two solutions in (rather rusty) Scheme, both zero-based again. A curried version: (define (f n) (cond ((zero? n) (lambda (x) x)) (#t (lambda (_) (f (- n 1)))))) Now > ((f 0) 1) 1 > (((((f 3) 1) 2) 3) 4) 4 An uncurried version: (define (f n) (lambda args (list-ref args n))) Now > ((f 0) 1) 1 > ((f 3) 1 2 3 4) 4 Jeremy.