Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: Brian Hurt <brian.hurt@qlogic.com>
To: Christophe Raffalli <Christophe.Raffalli@univ-savoie.fr>
Cc: Ocaml Mailing List <caml-list@inria.fr>
Subject: Re: [Caml-list] @, List.append, and tail recursion
Date: Thu, 30 Jan 2003 10:03:30 -0600 (CST)	[thread overview]
Message-ID: <Pine.LNX.4.33.0301300956080.3577-100000@eagle.ancor.com> (raw)
In-Reply-To: <3E38F6F6.7000206@univ-savoie.fr>

On Thu, 30 Jan 2003, Christophe Raffalli wrote:

> To compute append l1 l2 in a tail recursive way the only solution I see 
> (in a pure functionnal program) is to traverse l1 twice (to reverse it 
> first), which replaces using memory on the stack by using memory to 
> build an intermediate list (and this use more memory ?).

In a purely functional way, yes.

> 
> Usually in recursive program, when you limit youself to tail recursive 
> function, you have often to reverse list and lisp languages always 
> provide the rev_append function which is tail recursive and very often 
> what you need (often l1 is an accumulator and is naturaly reversed 
> compared with l2).

This traverses the list twice, and worse yet, allocates the list twice 
(once backwards, once forwards).  Which makes it slower than tail 
recursion.

Actually, the data structures with a hole optimization is more general 
than even I was thinking of.   Read the paper.

> 
> May be rev_append could be added to the list module (despite the fact it 
> is trivial to write it yoursleft) ?

Already there.

I am, when I have the time, staring at the ocaml code generation code, 
trying to get my mind around it.  I hope to eventually have something, but 
don't expect it soon. :-)

Brian


-------------------
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


  reply	other threads:[~2003-01-30 15:54 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-01-24 15:35 Andrew Kennedy
2003-01-30  1:44 ` brogoff
2003-01-30  9:57   ` Christophe Raffalli
2003-01-30 16:03     ` Brian Hurt [this message]
2003-01-31 10:33     ` Mattias Waldau
  -- strict thread matches above, loose matches on Subject: below --
2003-01-31 22:27 Harrison, John R
2003-01-31 19:58 Harrison, John R
2003-01-31 21:04 ` Brian Hurt
2003-01-31 17:32 Diego Olivier Fernandez Pons
2003-01-24  0:48 Brian Hurt
2003-01-30 18:10 ` Olivier Andrieu
2003-01-30 19:46   ` Brian Hurt
2003-01-30 20:52     ` Olivier Andrieu
2003-01-30 21:57       ` Brian Hurt
2003-01-31  2:16         ` james woodyatt
2003-01-31 17:05           ` Diego Olivier Fernandez Pons
2003-01-31 19:52             ` Brian Hurt
2003-01-31 21:34             ` Issac Trotts
2003-01-31 17:13           ` Brian Hurt
2003-01-31 17:42             ` brogoff
2003-01-31 19:18             ` Russ Ross
2003-01-31 19:32               ` Alexander V. Voinov
2003-02-01  2:30               ` brogoff
2003-01-31 23:12             ` Issac Trotts

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Pine.LNX.4.33.0301300956080.3577-100000@eagle.ancor.com \
    --to=brian.hurt@qlogic.com \
    --cc=Christophe.Raffalli@univ-savoie.fr \
    --cc=caml-list@inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox