summaryrefslogtreecommitdiff
path: root/clojure/src/lccl/lc
diff options
context:
space:
mode:
authorArnaud Bailly <arnaud.bailly@iohk.io>2025-01-25 10:45:41 +0100
committerArnaud Bailly <arnaud.bailly@iohk.io>2025-01-25 10:45:41 +0100
commit7752d73216578d5961751b5d0535088d384b4aa6 (patch)
tree786e46fe1276e93ade0a48398cd4c9ac13081707 /clojure/src/lccl/lc
parentd6f68e919db51d366c8ca3c1509bea12aa81d692 (diff)
downloadlambda-nantes-7752d73216578d5961751b5d0535088d384b4aa6.tar.gz
Move λ-calcul workshop code to subdirectory
Diffstat (limited to 'clojure/src/lccl/lc')
-rw-r--r--clojure/src/lccl/lc/ast.clj7
-rw-r--r--clojure/src/lccl/lc/evaluator.clj28
2 files changed, 0 insertions, 35 deletions
diff --git a/clojure/src/lccl/lc/ast.clj b/clojure/src/lccl/lc/ast.clj
deleted file mode 100644
index 58bad11..0000000
--- a/clojure/src/lccl/lc/ast.clj
+++ /dev/null
@@ -1,7 +0,0 @@
-(ns lccl.lc.ast)
-
-(defrecord Var [name])
-(defrecord Abs [arg body])
-(defrecord App [left right])
-
-(def IDENTITY (->Abs "x" (->Var "x")))
diff --git a/clojure/src/lccl/lc/evaluator.clj b/clojure/src/lccl/lc/evaluator.clj
deleted file mode 100644
index 70e972e..0000000
--- a/clojure/src/lccl/lc/evaluator.clj
+++ /dev/null
@@ -1,28 +0,0 @@
-(ns lccl.lc.evaluator
- (:import [lccl.lc.ast Var Abs App])
- (:require [lccl.lc.ast :refer [->Abs ->App]]))
-
-(declare substitute)
-
-(defmulti evaluate (fn [term] [(type term)]))
-(defmethod evaluate [Var] ([term] term))
-(defmethod evaluate [Abs] ([term] term))
-(defmethod evaluate [App]
- ([term]
- (let [left (-> term :left)]
- (condp = (type left)
- Abs (substitute (:body left) (:arg left) (:right term))
- term))))
-
-(defmulti substitute (fn [body arg val] [(type body)]))
-(defmethod substitute [Var]
- ([body arg val]
- (if (= (:name body) arg) val body)))
-(defmethod substitute [Abs]
- ([body arg val]
- (if (= (:arg body) arg)
- body
- (->Abs (:arg body) (substitute (:body body) arg val)))))
-(defmethod substitute [App]
- ([body arg val]
- (->App (substitute (:left body) arg val) (substitute (:right body) arg val))))