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 JAA06263; Tue, 21 May 2002 09:30:29 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id JAA06242 for ; Tue, 21 May 2002 09:30:28 +0200 (MET DST) Received: from sunny.pacific.net.au (sunny.pacific.net.au [203.25.148.40]) by concorde.inria.fr (8.11.1/8.11.1) with ESMTP id g4L7UPX04736 for ; Tue, 21 May 2002 09:30:26 +0200 (MET DST) Received: from wisma.pacific.net.au (wisma.pacific.net.au [210.23.129.72]) by sunny.pacific.net.au with ESMTP id g4K1IwXt029037 for ; Mon, 20 May 2002 11:18:58 +1000 (EST) Received: from ozemail.com.au (ppp104.dyn17.pacific.net.au [61.8.17.104]) by wisma.pacific.net.au with ESMTP id LAA25196 for ; Mon, 20 May 2002 11:18:56 +1000 (EST) Message-ID: <3CE84EFF.3090903@ozemail.com.au> Date: Mon, 20 May 2002 11:18:55 +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: [Caml-list] Tail recursion detection References: <200205172118.XAA19584@pauillac.inria.fr> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk I'm in the process of writing a tail recursion detector for Felix, and many of the routines are tail recursive (heh!). However, in a few places, there are multi-way branches each of which terminate in identical tail calls: let rec f x y = match .. with | .. -> if .. then if .. then if .. then f x' y' else f x' y' else f x' y' else f x' y' .. My question is: how smart is the Ocaml tail call detector? Can I optimise the above code like: let rec f x y = let tail () = f x y in if .. then if .. then if then tail() else tail() else tail() else tail() for example? [More likely, the 'tail' function will fix arguments which are commonly invariant ..] [If tail detection is done after inlining, and the tail() calls are inlined, the tail calls should be detected even if the tail call detector is fairly dumb. In that case, how can I be sure to inline tail() calls?] -- 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