JSFiddle - React, Tailwind, and code Playground
by meddle
JavaScript
var λ = lambda = function (arg, body) {
var realBody = body;
if (realBody instanceof Function) {
realBody = realBody.jsString();
}
var f = new Function(arg, 'return ' + realBody + ';');
var result = function (val) {
var value = result.lambda(val);
if ((value instanceof Function) && result.inner) {
value = lambda(result.inner.arg, result.inner.body.replace(result.arg, val));
}
return value;
};
if (body instanceof Function) {
result.inner = body;
}
result.lambda = f;
result.jsString = result.toString;
result.toString = function () {
return 'λ' + arg + '.(' + body + ')';
};
result.arg = arg;
result.body = realBody;
return result;
};
var print = function (data) {
var x = document.createElement("P");
var t = document.createTextNode(data);
x.appendChild(t);
document.body.appendChild(x);
};
//print(lambda('x', lambda('y', 'x*y')));
//print(lambda('x', lambda('y', 'x*y'))(3));
//print(lambda('x', lambda('y', 'x*y'))(3)(4));
//print(lambda('x', lambda("y", lambda('z', 'x + y + z'))));
print(lambda('x', lambda("y", lambda('z', 'x + y + z')))(2));
//print(lambda('x', lambda("y", lambda('z', 'x + y + z')))(5)(4)(4));