trampoline-js

Transforms recursion ⟹ loop
Usage
Install from npm
npm install trampoline-js
let { trampoline, done, more } = require('trampoline-js')
const times = (() => {
const _times = (acc, n, s) =>
n <= 0
? done(acc)
: more(_times, `${acc}${s}`, n - 1, s)
return trampoline(_times, '')
})()
times(5, '*')
API
function trampoline(genFun, [args])
trampoline
takes generate/recursive function and optional arguments (optional). it returns a function of form function ([arguments]) {}
.
On invoking returned function, genFun
will be called with args
followed by caller supplied arguments
.
genFun
should return either done
(a wrapper for base case) or more
(a wrapper function for continuation function). Otherwise, 'Invalid continuation' Error will be thrown.
function more(fun, [args])
more
should provide continuation function as first parameter and optional args.
function cont(fun, [args])
Alias for more
.
function done(result)
done
is a base case wrapper which takes terminal object and result
will be returned as output.
License
This plugin is licensed under the MIT license.
Copyright (c) 2016 Prince John Wesley