在core.logic
中,有一种方法可以翻译类似程序的输出
(run 2 [q]
(fresh [a]
(featurec q {:foo a})
(membero a '(5))
(conde
((featurec q {:bar 2}))
((featurec q {:baz 2})))))
进入满足每个解决方案约束的最小映射,在这种情况下为{:foo 5, :bar 2}
和{:foo 5, :baz 2}
?
答案 0 :(得分:0)
您可以尝试一下,虽然有点复杂,但确实可以。
(->> (run 1 [q]
(fresh [l1 l2 a]
(membero a '(5))
(emptyo l1)
(conso [:foo a] l1 l2)
(conso [:bar 2] l2 q)))
(first)
(into {}))
或
(run 1 [q]
(fresh [a B]
(membero a '(5))
(== B 2)
(== q {:foo a :bar B})))
我确信威廉·伯德可以做得更好。