unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
From: Damien Mattei <damien.mattei@gmail.com>
Cc: Guile User <guile-user@gnu.org>
Subject: Re: why I love scheme
Date: Wed, 15 Dec 2021 22:12:42 +0100	[thread overview]
Message-ID: <CADEOadcm-WhDL4VhYwytPzNNLJBSDpr+EGstpgA=zrg3yiKFMg@mail.gmail.com> (raw)
In-Reply-To: <98123b25-7995-ec8f-fc5a-30ff29efb9d6@posteo.de>

hello Stefan,

i have had two Scheme teacher before graduating and being teaching scheme
too.
One tell us that basically CPS is the same as recursivity.
The other one said students to always give an example of the use of a
Scheme function of our own unless it did not read and give a note to our
work. ;-)
Damien

On Wed, Dec 15, 2021 at 9:32 PM Zelphir Kaltstahl <
zelphirkaltstahl@posteo.de> wrote:

> I did not know, that lambdas are allocated on the heap. I have a few
> questions now:
>
> How does this affect using fibers? (And how do fibers work better in that
> case?)
>
> The unrolling you mentioned. Would same not be possible for the
> naive-but-not-tail-recursive version? Is the idea, that the continuation
> tail
> recursive version does work better, because the compiler is somehow able to
> optimize it better? If so, why?
>
> I am asking, because I once had the same kind of problem and then read,
> that
> instead of growing stack levels, I am growing the continuation, so not
> winning
> anything. But perhaps that was wrong and I should have gone for the
> continuation
> solution. I would like to be able to make an educated decision when next
> meeting
> such a problem.
>
> Best regards,
> Zelphir
>
>
> On 12/15/21 1:59 PM, Stefan Israelsson Tampe wrote:
> > I believe that the lambda closures will be allocated from the heap and
> hence
> > this procedure will
> > be perfect if you are using fibers.. Also the compiler can do magic if it
> > want's and unroll
> > and untangle a few iterations, so it can be very fast as well.My point
> is that
> > the named let
> > is such a nice  looping construct (try to do this with a for loop in
> java). I
> > use it all the time
> > and only sometimes I need to move to even more advanced constructs like
> letrec.
> >
> > On Wed, Dec 15, 2021 at 10:38 AM Zelphir Kaltstahl <
> zelphirkaltstahl@posteo.de
> > <mailto:zelphirkaltstahl@posteo.de>> wrote:
> >
> >     Hello Stefan!
> >
> >     This translates a recursive tree function into a tail recursive
> function.
> >     However, in this case, I am not sure it is really worth doing, in
> >     comparison to
> >     the naive (+ first-branch other-branch) solution. The reason is, that
> >     instead of
> >     a call stack for multiple branches, you are only moving that stuff
> into a
> >     longer
> >     and longer continuation, which will be on the stack in each
> recursive call.
> >
> >     However, I think you or other people on the list probably know more
> about this
> >     than I do and about how the approaches compare in terms of memory
> and time.
> >     Maybe the stack frames are more in size than the memory consumed by
> the
> >     overhead
> >     of the continuation, or the other way around.
> >
> >     Regards,
> >     Zelphir
> >
> >     On 12/15/21 12:44 AM, Stefan Israelsson Tampe wrote:
> >     > Maybe you think the below program is trivial, but I adore named
> let's so
> >     > much that I just cannot fathom that when people go functional they
> totally
> >     > miss this beauty
> >     >
> >     >
> >     > (define (count tree)
> >     >
> >     > ;; s = total sum up to now
> >     >
> >     > ;; t = tree of the type (car = child . cdr = siblings)
> >     >
> >     > ;; cont is the continuation, (cont 10) will continue
> >     >
> >     > ;; the calculation with the sum=10 see how we initiate
> >     >
> >     > ;; with a continuation that evaluates returns it's argument
> >     >
> >     >
> >     > (let loop ((s 0) (t tree) (cont (lambda (s) s)))
> >     >
> >     > (if (pair? t)
> >     >
> >     > (loop s (car t) (lambda (s) (loop s (cdr t) cont)))
> >     >
> >     > (cont (if (number? t) t 0))))
> >
> >     --
> >     repositories: https://notabug.org/ZelphirKaltstahl
> >     <https://notabug.org/ZelphirKaltstahl>
> >
> --
> repositories: https://notabug.org/ZelphirKaltstahl
>
>


      reply	other threads:[~2021-12-15 21:12 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-14 23:44 why I love scheme Stefan Israelsson Tampe
2021-12-15  1:21 ` Nala Ginrut
2021-12-15  9:38 ` Zelphir Kaltstahl
     [not found]   ` <CAGua6m2cwQShFHSwoEqqF5HiSewGU1cDJyBsZvmicVT46N=pOA@mail.gmail.com>
2021-12-15 20:30     ` Zelphir Kaltstahl
2021-12-15 21:12       ` Damien Mattei [this message]

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

  List information: https://www.gnu.org/software/guile/

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

  git send-email \
    --in-reply-to='CADEOadcm-WhDL4VhYwytPzNNLJBSDpr+EGstpgA=zrg3yiKFMg@mail.gmail.com' \
    --to=damien.mattei@gmail.com \
    --cc=guile-user@gnu.org \
    /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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).