Giter Club home page Giter Club logo

tco-node's Introduction

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');

tco-node's People

Contributors

andy2046 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.