ivo/README.md

35 lines
1.3 KiB
Markdown
Raw Normal View History

# untyped-lambda-calculus
A simple implementation of the untyped lambda calculus as an exercise.
This implementation lacks many features necessary to be useful,
for example `let` bindings, built-in functions, binding free variables, or a good REPL.
This project purely exists as an exercise and is not intended for general use.
I will make useful programming languages in the future, but this is not one of them.
## Usage
Type in your expression at the prompt: `>> `.
The result of the evaluation of that expression will then be printed out.
Exit the prompt with `Ctrl-C` (or however else you kill a program in your terminal).
Bound variables will be printed followed by a number representing the number of binders
between it and its definition for disambiguation.
This is not guaranteed not to capture free variables.
### Examples
```
>> (\D F I. D (F I)) (\x. x x) (\f. f (f y)) (\x. x)
y y
>> \x. \y. y x
\x. \y. y:0 x:1
>>
```
## Syntax
* Variables are alphanumeric, beginning with a letter.
* Applications are left-associative, and parentheses are not necessary.
* Lambdas are represented by `\\`, bind as far right as possible, and parentheses are not necessary.
### Examples
* Variables: `x`, `abc`, `D`, `fooBar`, `f10`
* Applications: `(\x. x x) y`, `a b`, `((g f) y)`
* Lambdas: `\x. N`, `\x y. y`, `(\x. f x)`