996
|
1 Lambda calculus interpreter
|
|
2 (c) Nikita Ayzikovsky, 2006
|
|
3
|
|
4 Usage:
|
|
5
|
|
6 run lambda.py, which reads a single-line lambda calculus program from stdin.
|
|
7
|
|
8 Syntax:
|
|
9
|
|
10 A program can optionally contain any number of definitions, followed by
|
|
11 an expression.
|
|
12
|
|
13 Definitions are of the form
|
|
14
|
|
15 name = expression ;
|
|
16
|
|
17 Expressions are standard lambda calculus expressions, with the symbol lambda
|
|
18 denoted by \. E.g.
|
|
19
|
|
20 \x,y,z.(x (z y))
|
|
21
|
|
22 Don't forget to surround with brackets anything that ought to be surrounded
|
|
23 with brackets (any lambda body where something gets applied to something else)
|
|
24 "\x,y.x y" is an application of \x,y.x to y; but "\x,y.(x y)" is a single function
|
|
25 of two variables.
|
|
26
|
|
27 IO:
|
|
28
|
|
29 Input is not implemented.
|
|
30 For output, an expression of the form "text", when evaluated, prints 'text'
|
|
31 and evaluates to the identity function.
|
|
32 #show is a special function that evaluates its argument, and prints out
|
|
33 the result before returning it.
|
|
34 #list is a special expression that, when evaluated, prints the list of all
|
|
35 definitions.
|
|
36
|
|
37
|
|
38 DEFINITIONS:
|
|
39
|
|
40 Definitions ('name = exp;') are persistent between program runs. To get
|
|
41 rid of all definitions, remove the file defs.pickle.
|