Clojure 核心逻辑不完全结果
我正在努力解决这个简单的关系,结果是不完整的,我不明白为什么 我从core.logic开始,我不知道这是一个bug还是我对它的理解不好Clojure 核心逻辑不完全结果,clojure,clojurescript,clojure-core.logic,Clojure,Clojurescript,Clojure Core.logic,我正在努力解决这个简单的关系,结果是不完整的,我不明白为什么 我从core.logic开始,我不知道这是一个bug还是我对它的理解不好 (require '[clojure.core.logic :as l]) (require '[clojure.core.logic.fd :as fd]) (defn zip+o [x y z] (l/conde [(l/== () x) (l/== () y) (l/== () z)] [(l/fresh [fx rx fy ry f
(require '[clojure.core.logic :as l])
(require '[clojure.core.logic.fd :as fd])
(defn zip+o [x y z]
(l/conde
[(l/== () x) (l/== () y) (l/== () z)]
[(l/fresh [fx rx fy ry fz rz]
(l/conso fx rx x)
(l/conso fy ry y)
(l/conso fz rz z)
(fd/in fx fy fz (fd/interval 10))
(fd/+ fx fy fz)
(zip+o rx ry rz))]))
; the same with defne macro
(comment
(l/defne zip+o [x y z]
([() () ()])
([[fx . rx]
[fy . ry]
[fz . rz]]
(fd/in fx fy fz (fd/interval 10))
(fd/+ fx fy fz)
(zip+o rx ry rz))))
(def expected-solutions
#{{:x [0 0] :y [1 1]}
{:x [0 1] :y [1 0]}
{:x [1 1] :y [0 0]}
{:x [1 0] :y [0 1]}})
(l/run* [q]
(l/fresh [x y]
(l/== q {:x x :y y})
(zip+o x y [1 1])))
;=> ({:x (1 0), :y (0 1)}
; {:x (0 0), :y (1 1)})
你至少应该描述一下你的投入和预期产出。我已经澄清了我的问题。我希望如此!您能否提供一个可以直接粘贴到
lein repl
(包括require
指令)中的示例fresh
、conde
、==
和run*
我相信所有这些都需要具备命名空间资格。好的,我只是简单地介绍一下你的建议。你至少应该描述一下你的投入和预期产出。我已经澄清了我的问题。我希望如此!您能否提供一个可以直接粘贴到lein repl
(包括require
指令)中的示例fresh
、conde
、==
和run*
我相信所有这些都需要具备命名空间资格。好的,我只是简单地介绍一下你的建议。