从defrel和fact到core.logic.pldb

pko*_*uer 2 clojure clojure-core.logic

想知道关于如何代码应与问候的弃用而改变任何帮助defrel事实,并移动PLDB

这是代码:

(defrel parent x y)
(facts parent ’[[dave kaylen]
                [frank dave]])

(defn grandparent
    [x y]
    (fresh [z]
        (parent x z)
        (parent z y)))

;; In the REPL
user> (run* [q]
          (fresh [x y]
              (grandparent x y)
              (== q [x y])))
;; Result
([frank kaylen])    
Run Code Online (Sandbox Code Playgroud)

Nie*_*lsK 9

(ns your.ns.here
  (:require [clojure.core.logic.pldb :as pldb]
            [clojure.core.logic :refer :all]))

(pldb/db-rel parent p1 p2)

(def facts
  (pldb/db
    [parent 'dave 'kaylen]
    [parent 'frank 'dave]))

(defn grandparent
  [x y]
  (fresh [z]
         (parent x z)
         (parent z y)))

(pldb/with-db facts
              (doall (run* [q]
                           (fresh [x y]
                                  (grandparent x y)
                                  (== q [x y])))))
=> ([frank kaylen])
Run Code Online (Sandbox Code Playgroud)

有关更多示例,请参阅core.logic源代码中的pldb测试