can_loop_transform: Tests if a function, provided by its name, can be...

Description Usage Arguments Functions Examples

Description

This function analyses a recursive function to check if we can transform it into a loop or trampoline version with transform. Since this function needs to handle recursive functions, it needs to know the name of its input function, so this must be provided as a bare symbol.

Usage

1
2
3

Arguments

fun

The function to check. Must be provided by its (bare symbol) name.

Functions

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
factorial <- function(n)
    if (n <= 1) 1 else n * factorial(n - 1)
factorial_acc <- function(n, acc = 1)
    if (n <= 1) acc else factorial_acc(n - 1, n * acc)

can_loop_transform(factorial) # FALSE -- and prints a warning
can_loop_transform(factorial_acc) # TRUE

can_loop_transform_(rlang::quo(factorial)) # FALSE -- and prints a warning
can_loop_transform_(rlang::quo(factorial_acc)) # TRUE

mailund/tailr documentation built on May 26, 2019, 5:42 p.m.