From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id SAA28680; Thu, 12 Jun 2003 18:16:05 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id SAA28905 for ; Thu, 12 Jun 2003 18:16:02 +0200 (MET DST) Received: from mail3.tpgi.com.au (mail.tpgi.com.au [203.12.160.59]) by nez-perce.inria.fr (8.11.1/8.11.1) with ESMTP id h5CGG0T15323 for ; Thu, 12 Jun 2003 18:16:01 +0200 (MET DST) Received: from ozemail.com.au (203-213-82-207-syd-ts14-2600.tpgi.com.au [203.213.82.207]) (authenticated (0 bits)) by mail3.tpgi.com.au (8.11.6/8.11.6) with ESMTP id h5CGFti05515 for ; Fri, 13 Jun 2003 02:15:57 +1000 Message-ID: <3EE8A73A.3020207@ozemail.com.au> Date: Fri, 13 Jun 2003 02:15:54 +1000 From: John Max Skaller User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.2.1) Gecko/20010901 X-Accept-Language: en-us MIME-Version: 1.0 To: caml-list@inria.fr Subject: Re: [Caml-list] How to find out if a function is tail recursive? References: <200306121443.QAA0000013156@beaune.inria.fr> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Spam: no; 0.00; ozemail:01 caml-list:01 tail-rec:01 recursion:01 toxteth:01 glebe:01 2037,:01 9660:01 0850:01 rec:01 nsw:01 snail:02 match:02 recursive:03 tail:03 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk > Hence, here is a tail-recursive range function. > > let rec do_range a b r = > if a > b then r > else do_range a (b-1) (b::r) (* tail-rec call *) > ;; There's a curious 'trick' with tail recursion, to make the result an argument. That's weird, but it works. You pass the result down to the end as an argument, and it gets returned only then. For example to count a list: let rec count lst acc = match lst with | [] -> acc | h::t -> count t (acc+1) instead of writing: let rec count lst = match lst with | [] -> 0 | h :: t -> 1 + count t which isn't tail recursive. -- John Max Skaller, mailto:skaller@ozemail.com.au snail:10/1 Toxteth Rd, Glebe, NSW 2037, Australia. voice:61-2-9660-0850 ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners