JSFiddle - React, Tailwind, and code Playground
JavaScript
var xs = take(10, fib(-1, 1));
alert(JSON.stringify(toArray(xs)));
function fib(a, b) {
var c = a + b;
return cons(c, lazy(fib, [b, c]));
}
function take(n, xs) {
return xs && n > 0 ?
cons(xs.head, lazy(take, [n - 1, eval(xs.tail)])) :
null;
}
function toArray(xs) {
return xs ?
[xs.head].concat(toArray(eval(xs.tail))) :
[];
}
function lazy(f, a) {
return function (k) {
return k(apply(f, a));
};
}
function apply(f, a) {
return f.apply(null, a);
}
function cons(head, tail) {
return {
head: head,
tail: tail
};
}
function eval(a) {
return typeof a === "function" ? a(id) : a;
}
function id(a) {
return a;
}