(ns nal.deriver (:require [nal.deriver.utils :refer [walk]] [nal.deriver.key-path :refer [mall-paths all-paths mpath-invariants path-with-max-level]] [nal.deriver.rules :refer [rule]])) | |
(defn get-matcher [rules p1 p2] (let [matchers (->> (mall-paths p1 p2) (filter rules) (select-keys rules) (map (fn [el] (:matcher (second el)))))] (case (count matchers) 0 (constantly []) 1 (first matchers) (fn [t1 t2] (mapcat #(% t1 t2) matchers))))) | |
(def mget-matcher (memoize get-matcher)) (def mpath (memoize path-with-max-level)) (defn generate-conclusions [rules {p1 :statement :as t1} {p2 :statement :as t2}] (let [matcher (mget-matcher rules (mpath p1) (mpath p2))] (matcher t1 t2))) | |