4

对于如何在弃用defrelfact以及迁移到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])    
4

1 回答 1

11
(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])

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

于 2014-05-22T20:22:14.867 回答