diff options
| author | Arnaud Bailly <arnaud.bailly@iohk.io> | 2025-01-25 10:45:41 +0100 |
|---|---|---|
| committer | Arnaud Bailly <arnaud.bailly@iohk.io> | 2025-01-25 10:45:41 +0100 |
| commit | 7752d73216578d5961751b5d0535088d384b4aa6 (patch) | |
| tree | 786e46fe1276e93ade0a48398cd4c9ac13081707 /clojure/src/lccl/lc/evaluator.clj | |
| parent | d6f68e919db51d366c8ca3c1509bea12aa81d692 (diff) | |
| download | lambda-nantes-7752d73216578d5961751b5d0535088d384b4aa6.tar.gz | |
Move λ-calcul workshop code to subdirectory
Diffstat (limited to 'clojure/src/lccl/lc/evaluator.clj')
| -rw-r--r-- | clojure/src/lccl/lc/evaluator.clj | 28 |
1 files changed, 0 insertions, 28 deletions
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)))) |
