summaryrefslogtreecommitdiff
path: root/clojure
diff options
context:
space:
mode:
Diffstat (limited to 'clojure')
-rw-r--r--clojure/.gitignore6
-rw-r--r--clojure/deps.edn13
-rw-r--r--clojure/src/lccl/app.clj30
-rw-r--r--clojure/src/lccl/fwk/middlewares.clj15
-rw-r--r--clojure/src/lccl/lc/ast.clj7
-rw-r--r--clojure/src/lccl/lc/evaluator.clj28
-rw-r--r--clojure/src/lccl/main.clj36
-rw-r--r--clojure/test/lccl/lc/evaluator_test.clj46
8 files changed, 0 insertions, 181 deletions
diff --git a/clojure/.gitignore b/clojure/.gitignore
deleted file mode 100644
index 883fee3..0000000
--- a/clojure/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-.cpcache
-.nrepl-port
-.calva
-
-target
-
diff --git a/clojure/deps.edn b/clojure/deps.edn
deleted file mode 100644
index b43182c..0000000
--- a/clojure/deps.edn
+++ /dev/null
@@ -1,13 +0,0 @@
-{:paths ["src"]
- :deps
- {metosin/reitit {:mvn/version "0.7.0"}
- metosin/reitit-middleware {:mvn/version "0.7.0"}
- ring/ring-jetty-adapter {:mvn/version "1.12.1"}
- ring/ring-devel {:mvn/version "1.12.1"}
- clj-http/clj-http {:mvn/version "3.13.0"}}
-
- :aliases
- {;; Run with clj -T:build function-in-build
- :build {:deps {io.github.clojure/tools.build {:git/tag "v0.10.0" :git/sha "3a2c484"}}
- :ns-default build}}}
- \ No newline at end of file
diff --git a/clojure/src/lccl/app.clj b/clojure/src/lccl/app.clj
deleted file mode 100644
index 522d8bf..0000000
--- a/clojure/src/lccl/app.clj
+++ /dev/null
@@ -1,30 +0,0 @@
-(ns lccl.app
- (:require [reitit.ring :as ring-reitit]
- [reitit.coercion.malli]
- [reitit.ring.malli]
- [reitit.dev.pretty :as pretty]
- [reitit.ring.middleware.muuntaja :as muuntaja]
- [muuntaja.core :as m]))
-
-(defn eval
- [request]
- (let [sexpr (slurp (:body request))]
- (println "Demande d'évaluation de l'expression :" sexpr)
- {:status 200, :body sexpr}))
-
-(defn api-handler
- []
- (ring-reitit/ring-handler
- (ring-reitit/router
- [["/eval" {:post eval}]]
-
- {:exception pretty/exception
- :data {
- :muuntaja m/instance
- :middleware [muuntaja/format-response-middleware]}})))
-
-(defn app-handler
- []
- (ring-reitit/routes (api-handler)))
-
-
diff --git a/clojure/src/lccl/fwk/middlewares.clj b/clojure/src/lccl/fwk/middlewares.clj
deleted file mode 100644
index 973cffc..0000000
--- a/clojure/src/lccl/fwk/middlewares.clj
+++ /dev/null
@@ -1,15 +0,0 @@
-(ns lccl.fwk.middlewares
- (:require [ring.middleware.reload :as reload]))
-
-; https://bogoyavlensky.com/blog/auto-reloading-ring/
-(defn reloading-ring-handler
- "Reload ring handler on each request."
- [f]
- (let [reload! (#'reload/reloader ["src"] true)]
- (fn
- ([request]
- (reload!)
- ((f) request))
- ([request respond raise]
- (reload!)
- ((f) request respond raise))))) \ No newline at end of file
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))))
diff --git a/clojure/src/lccl/main.clj b/clojure/src/lccl/main.clj
deleted file mode 100644
index 071d7c6..0000000
--- a/clojure/src/lccl/main.clj
+++ /dev/null
@@ -1,36 +0,0 @@
-(ns lccl.main
- (:require [ring.adapter.jetty :as ring-jetty]
- [clj-http.client :as client]
- [lccl.app :as app]
- [lccl.fwk.middlewares :as middlewares])
- (:gen-class))
-
-(def TEAM_NAME "LCCL")
-(def SELF_PORT 8888)
-(def SELF_URL (str "http://127.0.0.1:" SELF_PORT))
-(def TESTER_URL "http://127.0.0.1:8080")
-
-(defn run-http-server!
- [{:keys [dev-mode? server-options]}]
- (let [create-handler-fn #(app/app-handler)
- handler* (if dev-mode?
- (middlewares/reloading-ring-handler create-handler-fn)
- (create-handler-fn))]
- (ring-jetty/run-jetty handler* server-options)
- (println "Evaluateur à l'écoute sur le port" (:port server-options))))
-
-(defn- run! [{dev-mode? :dev-mode?}]
- (run-http-server! {:dev-mode? dev-mode?
- :server-options {:join? false :port SELF_PORT}})
- (let [response (client/post (str TESTER_URL "/register")
- {:body (str "{\"url\": \"" SELF_URL "/eval\", \"name\": \"" TEAM_NAME "\"}")
- :content-type :json
- :accept :json})]
- (println "Résultat de l'enregistrement : " (:body response))))
-
-(defn -main
- [& _]
- (run! {:dev-mode? false}))
-
-(comment
- (run! {:dev-mode? true}))
diff --git a/clojure/test/lccl/lc/evaluator_test.clj b/clojure/test/lccl/lc/evaluator_test.clj
deleted file mode 100644
index d1e9c41..0000000
--- a/clojure/test/lccl/lc/evaluator_test.clj
+++ /dev/null
@@ -1,46 +0,0 @@
-(ns lccl.lc.evaluator-test
- (:require
- [clojure.test :refer [deftest testing is]]
- [lccl.lc.ast :refer [->Var ->Abs ->App IDENTITY]]
- [lccl.lc.evaluator :refer [substitute evaluate]]))
-
-(def x (->Var "x"))
-(def y (->Var "y"))
-(def z (->Var "z"))
-
-(defn- assertEvalTo
- [termToEvaluate result]
- (is (= result (evaluate termToEvaluate))))
-
-(deftest evaluation
- (testing "l'evaluation d'une variable rend la même variable"
- ; evaluate(x) == x
- (assertEvalTo x x))
- (testing "l'evaluation d'une abstraction rend la même abstraction"
- ; evaluate(λx.x) == λx.x
- (assertEvalTo IDENTITY IDENTITY))
- (testing "l'evaluation de l'application de deux vars rend la même abstraction"
- ; evaluate(x y) == x y
- (assertEvalTo (->App x y) (->App x y)))
- (testing "l'evaluation de l'application de l'identite sur un argument rend l'argument"
- ; evaluate((λx.x) y) == y
- (assertEvalTo (->App IDENTITY y) y))
- (testing "l'evaluation de l'application d'une abstraction substitue son argument"
- ; evaluate((λx.x x) y) == y y
- (assertEvalTo (->App (->Abs "x" (->App x x)) y) (->App y y)))
- (testing "l'evaluation de l'application d'une abstraction d'abstraction substitue recursivement son argument"
- ; evaluate((λx.λy.x) z) == λy.z
- (assertEvalTo (->App (->Abs "x" (->Abs "y" x)) z) (->Abs "y" z)))
- (testing "l'evaluation de l'application d'une abstraction ne substitue pas ses variables libres"
- ; evaluate((λx.y) z) == y
- (assertEvalTo (->App (->Abs "x" y) z) y))
- (testing "l'evaluation de l'application d'une abstraction d'abstraction ne substitue pas les variables redéfinies"
- ; evaluate((λx.λx.x) z) == λx.x
- (assertEvalTo (->App (->Abs "x" (->Abs "x" x)) z) (->Abs "x" x)))
- )
-
-(deftest substitution
- (testing "la substitution d'une variable rend la même variable"
- ; substitute(x x, y) == y y
- (is (= y (substitute x "x" y)))))
-