diff options
author | Kyle Serrecchia | 2025-01-30 19:16:55 -0800 |
---|---|---|
committer | Kyle Serrecchia | 2025-01-30 19:16:55 -0800 |
commit | 9f86e33013615d6f1af60056efeaf2aa2479acc0 (patch) | |
tree | 06ddfc1c9290fa8fb0a42aa3825e8b3c2445b240 | |
parent | b6b87507aef85a84ea2909c05826efd9334faf7a (diff) |
added racket
-rw-r--r-- | r/racket/README.md | 3 | ||||
-rw-r--r-- | r/racket/lambda-core.rkt | 96 |
2 files changed, 99 insertions, 0 deletions
diff --git a/r/racket/README.md b/r/racket/README.md new file mode 100644 index 0000000..9c04ccf --- /dev/null +++ b/r/racket/README.md @@ -0,0 +1,3 @@ +Download Racket version 6 or above + +Run by lambda-core.rkt like this: `racket lambda-core.rkt`
\ No newline at end of file diff --git a/r/racket/lambda-core.rkt b/r/racket/lambda-core.rkt new file mode 100644 index 0000000..c9f695f --- /dev/null +++ b/r/racket/lambda-core.rkt @@ -0,0 +1,96 @@ +#lang racket + +; LOGIC +(define _true + (lambda (x) + (lambda (y) x))) + +(define _false + (lambda (x) + (lambda (y) y))) + +(define _not + (lambda (b) + ((b _false) _true))) + +(define _and + (lambda (b1) + (lambda (b2) + ((b1 b2) _false)))) + +(define _or + (lambda (b1) + (lambda (b2) + ((b1 _true) b2)))) + + +; CHURCH NUMERALS +(define _zero + (lambda (f) + (lambda (x) x))) + +(define _succ + (lambda (n) + (lambda (f) + (lambda (x) + (f ((n f) x)))))) + +(define _pred + (lambda (n) + (lambda (f) + (lambda (x) + (((n (lambda (g) + (lambda (h) (h (g f))))) + (lambda (u) x)) + (lambda (a) a)))))) + +(define _one (_succ _zero)) + + +; HELPERS - not pure lambda calculus +(define read-bool + (lambda (b) + (displayln ((b "t") "f")))) + +(define read-church + (lambda (n) + (displayln ((n (lambda (x) (+ x 1))) 0)))) + +; ------------------------------------------------- + +; EXAMPLES +(displayln "LOGIC") +(displayln "--------------") +(displayln "TRUE/FALSE") +(read-bool _true) ; t +(read-bool _false) ; f + +(displayln "NOT") +(read-bool (_not _true)) ; f +(read-bool (_not _false)) ; t + +(displayln "AND") +(read-bool ((_and _true) _true)) ; t +(read-bool ((_and _true) _false)) ; f +(read-bool ((_and _false) _true)) ; f +(read-bool ((_and _false) _false)) ; f + +(displayln "OR") +(read-bool ((_or _true) _true)) ; t +(read-bool ((_or _true) _false)) ; t +(read-bool ((_or _false) _true)) ; t +(read-bool ((_or _false) _false)) ; f + +(displayln "\nCHURCH NUMERALS") +(displayln "--------------") +(displayln "ZERO/SUCC") +(read-church _zero) ; 0 +(read-church (_succ _zero)) ; 1 +(read-church (_succ (_succ _zero))) ; 2 +(read-church (_succ (_succ (_succ _zero)))) ; 3 + +(displayln "PRED") +(read-church (_pred _one)) ; 0 +(read-church (_pred (_succ _one))) ; 1 +(read-church (_pred (_succ (_succ _one)))) ; 2 + |