Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function tco(g){
- //arguments
- g.__first = true;
- g.__cont = {};
- g.__original = g
- g.__tco = function (){
- var r;
- if(g.__first){
- g.__first = false;
- for(;;){
- var r = g.apply(this,arguments)
- if (g.__cont === r){
- arguments = g.__args //update arguments
- } else {
- g.__first = true;
- return r;
- }
- }
- } else {
- g.__args = arguments;
- return g.__cont;
- }
- }
- return g.__tco
- }
- function f(n,sum){
- return (n>0)? f(n-1,sum+n) : sum;
- }
- function even(n){return n==0 ? true : odd(n-1)}
- function odd(n){return n==0 ? false : even(n-1)}
- f = tco(f)
- console.log(f(1000000,0))
- even = tco(even)
- odd = tco(odd)
- console.log(odd(10000000))
Add Comment
Please, Sign In to add comment