This project implements a Lambda Calculus interpreter in Rust. It supports various operations and Church encodings for numbers and boolean values.
This project includes a REPL for interactive use of the Lambda Calculus interpreter. To start the REPL, run the project's main executable.
The REPL supports the following commands:
- :helpor- :?- Show the help message
- :exit- Exit the REPL
- :clear- Clear the screen
- :last- Show the last result
- :log <level>- Set the log level (error, warn, info, debug, trace)
To evaluate a Lambda Calculus expression, simply type it into the REPL and press Enter.
The interpreter supports the following instructions and operations:
- 
Basic Lambda Calculus - Variable: x,y,z, etc.
- Abstraction: λx. <expression>
- Application: (<expression> <expression>)
 
- Variable: 
- 
Church Numerals - Encoding: Automatically handled by the interpreter
- Decoding: Automatically handled by the interpreter
- Predecessor: pred
- Successor: succ
- Is Zero: is_zero
- Multiplication: multiplyor*
 
- 
Church Booleans - True: true(encoded asλx. λy. x)
- False: false(encoded asλx. λy. y)
- And: and
- Or: or
- Not: not
 
- True: 
- 
Control Flow - If-Then-Else: ifthenelse
 
- If-Then-Else: 
- 
Pairs - Create Pair: pair
- First Element: first
- Second Element: second
 
- Create Pair: 
- 
Recursion - Y Combinator: Y
 
- Y Combinator: 
Here are some examples of how to use the interpreter:
- 
Church Numeral Operations: (multiply 2 3) (is_zero 0) (pred (succ 5))
- 
Boolean Operations: (and true false) (or true false) (not true)
- 
Conditional Statement: (ifthenelse (is_zero 0) 1 2)
- 
Pair Operations: (pair 1 2) (first (pair 1 2)) (second (pair 1 2))
- 
Factorial using Y Combinator: (Y (λf. λn. (ifthenelse (is_zero n) 1 (multiply n (f (pred n))))))