trampoline-js
v1.1.0
Published
Transforms recursion ⟹ loop
Downloads
7
Maintainers
Readme
trampoline-js
Transforms recursion ⟹ loop
Usage
Install from npm
npm install trampoline-js
let { trampoline, done, more } = require('trampoline-js')
const times = (() => {
// optional accumulators & user input
const _times = (acc, n, s) =>
n <= 0
// on done (base condition)
? done(acc)
// continuation as thunks
// takes continuation function and params
: more(_times, `${acc}${s}`, n - 1, s)
// build trampoline by passing recursive function and optional initial objects
return trampoline(_times, '')
})()
times(5, '*')
// > '*****'
API
function trampoline(genFun, [args])
trampoline
takes generate/recursive function and optional arguments (optional). it returns a function of formfunction ([arguments]) {}
.
On invoking returned function,
genFun
will be called withargs
followed by caller suppliedarguments
.
genFun
should return eitherdone
(a wrapper for base case) ormore
(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 andresult
will be returned as output.
License
This plugin is licensed under the MIT license.
Copyright (c) 2016 Prince John Wesley