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