tco-node
tail call optimization for javascript
Last updated 3 years ago by andy*() .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install tco-node 
SYNC missed versions from official npm registry.

tco-node

tco-node is a JavaScript library for tail call optimization.

Examples

import { tco, trampoline } from 'tco-node';

const sum = tco(function(x, y) {
  if (y > 0) {
    return sum(x + 1, y - 1)
  } else {
    return x
  }
})

console.log( sum(1, 100000) ) // => 100001

function isEvenInner (num) {
  if (num === 0) {
    return true
  }

  if (num === 1) {
    return false
  }

  return function() {
    return isEvenInner(Math.abs(num) - 2)
  }
}

console.log( trampoline(isEvenInner, 99999) )
// => false

console.log( trampoline(isEvenInner, 99998) )
// => true

const isEven = trampoline.bind(null, isEvenInner)

console.log( isEven(99999) )
// => false


function factorial (n) {
  function recur (n, acc) {
    if (n === 0) {
      return acc
    } else {
      return recur.bind(null, n-1, n*acc)
    }
  }
  return function () {
    return recur.bind(null, n, 1)
  }
}

console.log( trampoline(factorial(100000)) )
// => Infinity

function _even (n) {
  if (n === 0) {
    return true
  } else {
    return _odd.bind(null, n-1)
  }
}

function _odd (n) {
  if (n === 0) {
    return false
  } else {
    return _even.bind(null, n-1)
  }
}

function even (n) {
  return trampoline(_even.bind(null, n))
}

function odd (n) {
  return trampoline(_odd.bind(null, n))
}

console.log(
  even(99999),
  odd(99999),
  even(99998),
  odd(99998)
)
// false true true false

Installation

npm install --save tco-node

Usage

You can import from tco-node:

import { tco, trampoline } from 'tco-node';
// or
const { tco, trampoline } = require('tco-node');

Current Tags

  • 1.1.0                                ...           latest (3 years ago)

2 Versions

  • 1.1.0                                ...           3 years ago
  • 1.0.0                                ...           3 years ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 0
Last Day 0
Last Week 0
Last Month 1
Dependencies (0)
None
Dev Dependencies (0)
None
Dependents (0)
None

Copyright 2014 - 2016 © taobao.org |