-
Notifications
You must be signed in to change notification settings - Fork 4
/
parse.lam
31 lines (29 loc) · 1.14 KB
/
parse.lam
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#define True (\t \f t)
#define False (\t \f f)
#define b0 True
#define b1 False
#define Nil False
#define U (\x x x)
#define Id (\x x)
#define R (t (\u \v u (\w w (\x j (\y y x k) (\y n (\z \a a (g y))))) (n (\w \x x (k (f p))))))
#define T (t (\u \v u (m n) (v False (\w \x w (m n) (x False False (\y \z y (j k (\a \b b (\c n (\d \e e a)))) (\a r)))))))
#define Q (\s \t s T R)
#define P (\p \q \r p False Q q)
#define O (\m \n \o o P (n True o))
#define N ((\m U (\n m (n n))) O)
#define M (\m m (\n n n (U (\o \p m (\q q (l p) (\r o o (h p r)))))))
#define V (\k \l \m l (\n \o \p m (\q n q (\r \s q s r) (k o) (\r \s \t s))) l)
#define W (\j V (j j))
#define X (\f \g \h \i U W g h (\j \k k e (i (f f g) j)) (\j \k k e (\l l d j)))
#define J (\j \k \l M N)
#define I (\i J (i i))
#define H (\h U I Id Id)
#define G (\g H (\h \i \j \k k d (\l l e (h (i j)))))
#define F (\f G (\g \h \i i d (\j j d (g h))))
#define E (\e F (U X))
//(c b1) is the list representing char '1'
#define D (\d E (c b1))
//(c b0) is the list representing char '0'
#define C (\c D (c b0))
#define B (\b C (\c a (a (b (b (a (a (a (\d d c Nil)))))))))
(\a B (\b \c c b1 b)) (\a \b b b0 a)