resume/text/code_samples_compiler.org
2024-06-18 12:06:05 -05:00

31 lines
718 B
Org Mode
Executable file

* The Metacircular Interpretter in Clojure
#+BEGIN_SRC clojure
(ns interpreter.core
(:gen-class))
(require '[farg.pmatch :refer [pmatch]])
(def base-env
(fn [x]
(pmatch x
inc inc
dec dec
x 1)))
(def eval-expr
(fn [expr env]
(pmatch expr
~x (guard (number? x)) x
~x (guard (symbol? x)) (env x)
(lambda (~arg) ~body)
(fn [x]
(eval-expr body
(fn [sym]
(if (= sym arg)
x
(env sym)))))
(~rator ~rand)
((eval-expr rator env)
(eval-expr rand env)))))
#+END_SRC