Advertisement
JaceDK

Untitled

May 6th, 2019
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.29 KB | None | 0 0
  1. let ZERO = \f x -> x
  2. let ONE = \f x -> f x
  3. let TWO = \f x -> f (f x)
  4. let THREE = \f x -> f (f (f x))
  5. let FOUR = \f x -> f (f (f (f x)))
  6. let FIVE = \f x -> f (f (f (f (f x))))
  7. let SIX = \f x -> f (f (f (f (f (f x)))))
  8. let TEN = \f x -> f ( f ( f ( f ( f ( f ( f ( f ( f ( f x)))))))))
  9.  
  10. let TRUE = \x y -> x
  11. let FALSE = \x y -> y
  12. let ITE = \b x y -> b x y
  13. let AND = \b1 b2 -> ITE b1 b2 FALSE
  14. let OR = \b1 b2 -> ITE b1 TRUE b2
  15.  
  16. --------------------------------------------------------------------------------
  17. -- Numbers
  18. --------------------------------------------------------------------------------
  19.  
  20. let INCR = \n f x -> f (n f x)
  21.  
  22. --------------------------------------------------------------------------------
  23. -- Pairs
  24. --------------------------------------------------------------------------------
  25.  
  26. let PAIR = \x y b -> b x y
  27. let FST = \p -> p TRUE
  28. let SND = \p -> p FALSE
  29.  
  30. --------------------------------------------------------------------------------
  31. -- do not modify text BEFORE this line
  32. --------------------------------------------------------------------------------
  33.  
  34. let SKIP1 = \j k -> (\b -> b TRUE ((AND TRUE (k(TRUE))) (j(k(FALSE))) (k(FALSE)))) -- (a)
  35. let DECR = \n -> (n (SKIP1 INCR) (PAIR FALSE ZERO)) FALSE -- (b)
  36. let SUB = \m n -> (n DECR) m -- (c)
  37. let ISZ = \n -> n(\a -> FALSE) TRUE -- (d)
  38. let EQL = \n m -> AND (ISZ (SUB m n)) (ISZ (SUB n m)) -- (e)
  39.  
  40. let SUC = \n f x -> f (n f x)
  41. let ADD = \n m -> n SUC m
  42. let MUL = \n m -> n (ADD m) ZERO
  43. let REPEAT = \n m -> n (PAIR m) FALSE
  44. let EMPTY = \p -> p (\x y z -> FALSE) TRUE
  45. let FIX = \stp -> (\x -> stp (x x)) (\x -> stp (x x))
  46. let LEN = FIX (\rec n -> (EMPTY n) ZERO (INCR (rec (SND n))))
  47. let STEP = \rec n -> ITE (ISZ n) ZERO (ADD n (rec (DECR n)))
  48. let SUM = FIX STEP
  49. let DIV = FIX (\rec n m -> ITE (EQL n m) ONE (ITE (ISZ (SUB n m) ) ZERO (INCR (rec (SUB n m) m))))
  50. let MOD = FIX (\rec n m -> ITE (EQL n m) ZERO (ITE (ISZ (SUB n m) ) n (rec (SUB n m) m)))
  51. let INSERT = \n m -> (PAIR n m)
  52. let RECAPPEND = FIX (\rec n m -> ITE (EMPTY n) m (INSERT (FST n) (rec (SND n) m)))
  53. let PAIR1 = \n -> SND n
  54. let PAIR2 = \n -> FST n
  55. let BEEP = \n m -> (EMPTY n) m (INSERT (FST n) m)
  56.  
  57. eval repeat :
  58. BEEP (FALSE) (PAIR TWO FALSE)
  59. =*> (PAIR TWO FALSE)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement