2024年Clojure状态调查中分享您的想法!

欢迎!请查看关于页面以了解更多关于这个平台的详细信息。

0
core.logic

嗨,
我在一个简单的core.logic程序中遇到了一个问题

(require '[clojure.core.logic :as l]

     '[clojure.core.logic.pldb :as db])
     

(def facts
(db/db

[In-zone 'A 'B]))

(println
(db/with-db facts

    (l/run* [q]
      (l/fresh [x y]
        (In-zone x y)
        (== q 'IN-ZONE)))))

它给出了这个结果

user=> (load-file "../PROGS/CL/inzone.clj")
CompilerException java.lang.ClassCastException: class clojure.core.logic.LVar cannot be cast to class java.lang.Number (clojure.core.logic.LVar is in unnamed module of loader clojure.lang.DynamicClassLoader @4d2015a9; java.lang.Number is in module java.base of loader 'bootstrap'), compiling:(/home/ru/clojure/core.logic-master/../PROGS/CL/inzone.clj:8:1)

哪里出问题了?没有提到数字!

提前感谢您的任何帮助。

1 答案

0

我认为你忘记了引用core.logic中的==,而你使用的是clojure.core/==,这解释了数字错误。

(require '[clojure.core.logic :as l]
         '[clojure.core.logic.pldb :as db])

(db/db-rel In-zone a b)

(def facts (db/db [In-zone 'A 'B])) 

(println
   (db/with-db facts
    (l/run* [q]
      (l/fresh [x y]
        (In-zone x y)
        (l/== q [x y])))))

;;([A B])
太好了,Tom!
我的错:( 感谢!
顺便问一下,你能推荐一些关于core.logic及其API的全面文档,包括示例等吗?我所找到的都是零散的。
我认为过时的文档已经是最全的了。大多数人推荐查看“The Reasoned Schemer”,因为这个是基于miniKanren的,而core.logic就是基于它的。在某些操作中会有奇怪的错误或反直观的结果(example项目就是一个例子)。

在这个节点,库已经基本上稳定了,除非出现新的兴趣。如果我能帮忙解答问题,我会很高兴。
"The Reasoned Schemer"这本书很奇怪、很有趣,有些理论性,对开发者来说不是一个常见的文档。
有间接证据表明core.logic在一些重要的项目中使用了,比如Datomic。我不确定。但无论如何,再次感谢。
...