aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyle Serrecchia2025-01-30 19:16:55 -0800
committerKyle Serrecchia2025-01-30 19:16:55 -0800
commit9f86e33013615d6f1af60056efeaf2aa2479acc0 (patch)
tree06ddfc1c9290fa8fb0a42aa3825e8b3c2445b240
parentb6b87507aef85a84ea2909c05826efd9334faf7a (diff)
added racket
-rw-r--r--r/racket/README.md3
-rw-r--r--r/racket/lambda-core.rkt96
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
+