Skip to content

andrewchambers/janet-unify

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 

Repository files navigation

janet-unify

A simple unification library.

Quick Example, A code simplifier engine

(use ./unify)

(def simplifications
  [['(= (length ?d) 0) '(empty? ?d)]
   ['(set ?n (+ ?n 1)) '(++ ?n)]])

(defn simplify-form
  [f]
  (reduce
    (fn [f [p r]]
      (if-let [subst (unify p f)]
        (apply-subst subst r)
        f))
    f
    simplifications))

(defn fix-point
  [f v1]
  (def v2 (f v1))
  (if (deep= v1 v2)
    v2
    (fix-point f v2)))

(defn simplify
  [code]
  (fix-point |(prewalk simplify-form $) code))

(def code
  '(while (= (length ds) 0)
     (set v (+ v 1))
     (foo)))

(simplify code)
> (while (empty? ds) (++ v) (foo))

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published