Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let ZERO = \f x -> x
- let ONE = \f x -> f x
- let TWO = \f x -> f (f x)
- let THREE = \f x -> f (f (f x))
- let FOUR = \f x -> f (f (f (f x)))
- let FIVE = \f x -> f (f (f (f (f x))))
- let SIX = \f x -> f (f (f (f (f (f x)))))
- let TEN = \f x -> f ( f ( f ( f ( f ( f ( f ( f ( f ( f x)))))))))
- let TRUE = \x y -> x
- let FALSE = \x y -> y
- let ITE = \b x y -> b x y
- let AND = \b1 b2 -> ITE b1 b2 FALSE
- let OR = \b1 b2 -> ITE b1 TRUE b2
- --------------------------------------------------------------------------------
- -- Numbers
- --------------------------------------------------------------------------------
- let INCR = \n f x -> f (n f x)
- --------------------------------------------------------------------------------
- -- Pairs
- --------------------------------------------------------------------------------
- let PAIR = \x y b -> b x y
- let FST = \p -> p TRUE
- let SND = \p -> p FALSE
- --------------------------------------------------------------------------------
- -- do not modify text BEFORE this line
- --------------------------------------------------------------------------------
- let SKIP1 = \j k -> (\b -> b TRUE ((AND TRUE (k(TRUE))) (j(k(FALSE))) (k(FALSE)))) -- (a)
- let DECR = \n -> (n (SKIP1 INCR) (PAIR FALSE ZERO)) FALSE -- (b)
- let SUB = \m n -> (n DECR) m -- (c)
- let ISZ = \n -> n(\a -> FALSE) TRUE -- (d)
- let EQL = \n m -> AND (ISZ (SUB m n)) (ISZ (SUB n m)) -- (e)
- let SUC = \n f x -> f (n f x)
- let ADD = \n m -> n SUC m
- let MUL = \n m -> n (ADD m) ZERO
- let REPEAT = \n m -> n (PAIR m) FALSE
- let EMPTY = \p -> p (\x y z -> FALSE) TRUE
- let FIX = \stp -> (\x -> stp (x x)) (\x -> stp (x x))
- let LEN = FIX (\rec n -> (EMPTY n) ZERO (INCR (rec (SND n))))
- let STEP = \rec n -> ITE (ISZ n) ZERO (ADD n (rec (DECR n)))
- let SUM = FIX STEP
- let DIV = FIX (\rec n m -> ITE (EQL n m) ONE (ITE (ISZ (SUB n m) ) ZERO (INCR (rec (SUB n m) m))))
- let MOD = FIX (\rec n m -> ITE (EQL n m) ZERO (ITE (ISZ (SUB n m) ) n (rec (SUB n m) m)))
- let INSERT = \n m -> (PAIR n m)
- let RECAPPEND = FIX (\rec n m -> ITE (EMPTY n) m (INSERT (FST n) (rec (SND n) m)))
- let PAIR1 = \n -> SND n
- let PAIR2 = \n -> FST n
- let BEEP = \n m -> (EMPTY n) m (INSERT (FST n) m)
- eval repeat :
- BEEP (FALSE) (PAIR TWO FALSE)
- =*> (PAIR TWO FALSE)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement