Displaying 4 results from an estimated 4 matches for "factorial_tr_automatic_2".
Did you mean:
factorial_tr_automatic_1
2018 Feb 27
2
Parallel assignments and goto
...lCC(function(escape) {
? ? ? ? repeat {
? ? ? ? ? ? n <- .tailr_n
? ? ? ? ? ? acc <- .tailr_acc
? ? ? ? ? ? if (n <= 1) {
? ? ? ? ? ? ? ? escape(acc)
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? .tailr_n <<- n - 1
? ? ? ? ? ? ? ? .tailr_acc <<- n * acc
? ? ? ? ? ? }
? ? ? ? }
? ? })
}
factorial_tr_automatic_2 <- function(n, acc = 1) {
? ? .tailr_env <- rlang::get_env()
? ? callCC(function(escape) {
? ? ? ? repeat {
? ? ? ? ? ? if (n <= 1) {
? ? ? ? ? ? ? ? escape(acc)
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? .tailr_env$.tailr_n <- n - 1
? ? ? ? ? ? ? ? .tailr_env$.tailr_acc <- n * acc
? ? ? ?...
2018 Feb 27
0
Parallel assignments and goto
....tailr_n
> acc <- .tailr_acc
> if (n <= 1) {
> escape(acc)
> } else {
> .tailr_n <<- n - 1
> .tailr_acc <<- n * acc
> }
> }
> })
> }
>
> factorial_tr_automatic_2 <- function(n, acc = 1) {
> .tailr_env <- rlang::get_env()
> callCC(function(escape) {
> repeat {
> if (n <= 1) {
> escape(acc)
> } else {
> .tailr_env$.tailr_n <- n - 1
> .ta...
2018 Feb 26
0
Parallel assignments and goto
...lCC(function(escape) {
? ? ? ? repeat {
? ? ? ? ? ? if (n <= 1) {
? ? ? ? ? ? ? ? escape(acc)
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? .tailr_n <- n - 1
? ? ? ? ? ? ? ? .tailr_acc <- n * acc
? ? ? ? ? ? ? ? n <- .tailr_n
? ? ? ? ? ? ? ? acc <- .tailr_acc
? ? ? ? ? ? }
? ? ? ? }
? ? })
}
factorial_tr_automatic_2 <- function(n, acc = 1) {
? ? .tailr_env <- rlang::get_env()
? ? callCC(function(escape) {
? ? ? ? repeat {
? ? ? ? ? ? if (n <= 1) {
? ? ? ? ? ? ? ? escape(acc)
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? .tailr_env$.tailr_n <- n - 1
? ? ? ? ? ? ? ? .tailr_env$.tailr_acc <- n * acc
? ? ? ?...
2018 Feb 11
4
Parallel assignments and goto
Hi guys,
I am working on some code for automatically translating recursive functions into looping functions to implemented tail-recursion optimisations. See https://github.com/mailund/tailr
As a toy-example, consider the factorial function
factorial <- function(n, acc = 1) {
if (n <= 1) acc
else factorial(n - 1, acc * n)
}
I can automatically translate this into the loop-version