JSFiddle - React, Tailwind, and code Playground
by skilldrick
JavaScript
function streamEnumerateInterval(low, high) {
if (low > high) {
return [];
}
else {
return [low, function () {
return streamEnumerateInterval(low + 1, high);
}];
}
}
function integersFrom(start) {
return [start, function () {
return integersFrom(start + 1);
}];
}
function carStream(str) {
return str[0];
}
function cdrStream(str) {
return str[1]();
}
function printStream(str) {
if (str.length === 0) {
return 'done';
}
else {
print(carStream(str));
return printStream(cdrStream(str));
}
}
function foreachStream(str, callback) {
if (str.length !== 0) {
setTimeout(function () {
callback(carStream(str));
foreachStream(cdrStream(str), callback);
}, 100);
}
}
function filter(predicate, str) {
if (str.length === 0) {
return [];
}
else if (predicate(carStream(str))) {
return [carStream(str), function () {
return filter(predicate, cdrStream(str));
}];
}
else {
return filter(predicate, cdrStream(str));
}
}
function sieve(str) {
return [carStream(str), function () {
var filterFunc = function (x) {
return x % carStream(str) !== 0;
};
return sieve(filter(filterFunc, cdrStream(str)));
}];
}
var primes = sieve(integersFrom(2));
foreachStream(primes, function (value) {
document.body.innerHTML = value;
});