JSFiddle - React, Tailwind, and code Playground
HTML
<script>
decoupledTrampoline =
fn => {
class Thunk {
constructor (fn, ...args) {
this.fn = fn;
this.args = args;
}
evaluate () {
return this.fn(...this.args);
}
}
const thunkify =
fn =>
(...args) =>
new Thunk(fn, ...args);
return (...initialArgs) => {
let value =
(x => x(x))(
maker =>
(...args) =>
fn(thunkify(maker(maker)), ...args)
)(...initialArgs);
while (value instanceof Thunk) {
value = value.evaluate();
}
return value;
};
};
isEven =
decoupledTrampoline(
(myself, n) => {
if (n === 0)
return true;
else if (n === 1)
return false;
else return myself(n - 2);
}
);
isEvenLoop = (n) => {
while(true) {
if(n === 0)
return true;
else if (n === 1)
return false;
else
n = n - 2;
}
};
alert(isEvenLoop(1212121212));
alert(isEven(1212121212));
</script>