Lambda Calculus
A simple, clean and fast implementation of the λ-calculus on JavaScript. It has zero dependencies and only 2.65KB gzipped. It evaluates terms very efficiently by using native JS functions, which is possible thanks to a clever compile/readback algorithm based on JS semantics. It includes the most relevant IO formats - bruijn-indices, binary, base64 and the usual "Wikipedia syntax" - so you can easily export to/from other tools. You can also convert native JS functions to terms and back.
Install
npm install lambda-calculus
Example
const lam = require("lambda-calculus"); // Parses an input with the "Wikipedia syntax". The lambdas are optionalconst input = lam.fromString("(λa.λb.(a (a b)) λa.λb.(a (a b)))"); // Computes the result using native JS functionsconst output = lam.reduce(input); // Print the resultconsole.log("Result: "+lam.toString(output)); // Print the result as bruijnconsole.log("Result (in bruijn): "+lam.toBruijn(output)); // Print the result as binaryconsole.log("Result (in binary): "+lam.toBLC(output)); // Print the result as base64 console.log("Result (in base64): "+lam.toBLC64(output)); // There is a corresponding `lam.fromFormat(str)` for all functions above
Output:
Result: a.b.Result : LLResult : 00000111001110011100111010Result : EHOc6
API
-- To/from native JS functionsfromFunction : Function -> TermtoFunction : Term -> Function -- To/from JS numbers (using the church-encoding)fromNumber : Number -> TermtoNumber : Term -> Number -- To/from the "Wikipedia syntax"fromString : String -> TermtoString : Term -> String -- To/from bruijn-indicesfromBruijn : String -> TermtoBruijn : Term -> String -- To/from binary lambda calculusfromBLC : String -> TermtoBLC : Term -> String -- To/from base64-encoded binary lambda calculusfromBLC64 : String -> TermtoBLC64 : Term -> String -- Reduces a term to normal formreduce : Term -> Termreduce = fromFunction . toFunction