Backchaining Code, version 2
We can add facts to our list of clauses by making a fact a premise clause with no antecedents; this is the form used in Prolog. Since the premise list is empty, every? returns true.
(defn backch [goal] ; goal is true (some (fn [clause] ; if there is some clause (and (= goal (first clause)) ; that concludes goal (every? backch (rest clause)))) ; and every premise is true clauses))
(def clauses '((a) (b) (d) (c a b) (e c d)) ) user=> (backch 'e) true