[R] Continuation-parsing / trampoline / infinite recursion problem

William Dunlap wdunlap at tibco.com
Wed Aug 10 19:48:23 CEST 2016


You may gain some understanding of what is going on by adding
the output of sys.nframe() or length(sys.calls()) to the cat() statement.

Bill Dunlap
TIBCO Software
wdunlap tibco.com

On Wed, Aug 10, 2016 at 9:59 AM, Thomas Mailund <mailund at birc.au.dk> wrote:

> An alternative implementation, closer to what I need when I have more than
> one recursion in each step, but still using factorial as the example, is
> this one:
>
> thunk_factorial <- function(n, continuation = identity) {
>   force(continuation) # if I remove this line I get an error
>   cat("call: ", n, "\n") # same for this line
>   if (n == 1) {
>     continuation(1)
>   } else {
>     new_continuation <- function(result) {
>       cat("thunk: ", result, "\n”) # remove this line and it fails, keep
> it and it works
>       make_thunk(continuation, n * result)
>     }
>     make_thunk(thunk_factorial, n - 1, new_continuation)
>   }
> }
> trampoline(thunk_factorial(10000))
>
> Here I am making a continuation instead of passing along an accumulator,
> which I need to do for more complex cases, and with that continuation I can
> also get it to complete without errors if I output the text inside it.
> Removing the `cat` line and I get the recursion error…
>
> Cheers
>         Thomas
>
>
>
> > On 10 Aug 2016, at 18:53, Thomas Mailund <mailund at birc.au.dk> wrote:
> >
> >
> >> On 10 Aug 2016, at 13:56, Thomas Mailund <mailund at birc.au.dk> wrote:
> >>
> >> make_thunk <- function(f, ...) f(...)
> >
> > Doh!  It is of course this one:
> >
> > make_thunk <- function(f, ...) function() f(…)
> >
> > It just binds a function call into a thunk so I can delay its evaluation.
> >
> > Sorry
> >       Thomas
> >
> >
> >
> > ______________________________________________
> > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide http://www.R-project.org/
> posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/
> posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list