53 lines
911 B
Plaintext
53 lines
911 B
Plaintext
T x y := x
|
|
F x y := y
|
|
if b t e := (b t e)
|
|
|
|
pair a b := \c.(c a b)
|
|
left p := (p T)
|
|
right p := (p F)
|
|
|
|
print n := (n 0 1 end)
|
|
|
|
fix f := (\x.(f (x x)) \x.(f (x x)))
|
|
|
|
some x := (pair T x)
|
|
none := \.F
|
|
isfull := left
|
|
unwrap := right
|
|
|
|
nil := none
|
|
push i l := (some (pair i l))
|
|
peek l := (left (unwrap l))
|
|
pop l := (right (unwrap l))
|
|
|
|
inc := (fix \self l.{
|
|
(if (isfull l)
|
|
(if (peek l)
|
|
(push F (self (pop l)))
|
|
(push T (pop l))
|
|
)
|
|
(push T nil)
|
|
)
|
|
})
|
|
|
|
print := (fix \self l.{
|
|
(if (isfull l)
|
|
((if (peek l) 1 0) (self (pop l)))
|
|
END
|
|
)
|
|
})
|
|
|
|
one := (push T nil)
|
|
double N := (push F N)
|
|
|
|
N :=
|
|
(double (double (double (double (double
|
|
(double (double (double (double (double
|
|
(double (double (double (double (double
|
|
(double (double (double (double (double
|
|
(double (double (double (double (double
|
|
(double (double (double (double (double
|
|
one))))))))))))))))))))))))))))))
|
|
|
|
(print N)
|