Синтезировать наименьшую карту, удовлетворяющую ограничениям Featurec в core.logic?
В 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}
?
1 ответ
Вы можете попробовать это, что немного сложно, но это делает работу.
(->> (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})))
Я уверен, что Уильям Берд может сделать лучше.