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));