https://github.com/thesephist/lambda
The untyped lambda calculus, implemented in Ink
https://github.com/thesephist/lambda
ink lambda-calculus y-combinator z-combinator
Last synced: 7 days ago
JSON representation
The untyped lambda calculus, implemented in Ink
- Host: GitHub
- URL: https://github.com/thesephist/lambda
- Owner: thesephist
- License: mit
- Created: 2021-01-11T06:32:36.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2021-01-11T08:57:17.000Z (over 4 years ago)
- Last Synced: 2025-03-12T14:14:18.385Z (4 months ago)
- Topics: ink, lambda-calculus, y-combinator, z-combinator
- Homepage: https://dotink.co/posts/lambda/
- Size: 50.8 KB
- Stars: 8
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Lambda calculus in Ink 🖋
This repo implements the [untyped lambda calculus](https://en.wikipedia.org/wiki/Lambda_calculus) with Church numeral encodings and a couple of fixed-point combinators in the [Ink programming language](https://dotink.co/).
`lambda.ink` contains the entire implementation and is thoroughly commented with explanations.

## Try it out
The bottom of the `lambda.ink` file is a short test program that uses the functions and values defined in the file to run a few small test programs, including an implementation of a `factorial` function working on Church numerals.
The test harness also includes two functions, `toNumber` and `toBool`, that convert the lambda calculus representations of numbers and booleans to their native Ink values.
For example, the Church numeral encoding of the number 3 is `Three`, defined as `f => x => f(f(f(x)))`. To convert a Church numeral to an Ink number value, use `toNumber`.
```
Three := f => x => f(f(f(x)))toNumber(Three) `` => 3
```To run the program, run `ink lambda.ink`.