Синтезировать наименьшую карту, удовлетворяющую ограничениям Featurec в core.logic? - PullRequest
0 голосов
/ 25 сентября 2018

В 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 Ответ

0 голосов
/ 25 сентября 2018

Вы можете попробовать это, что немного сложно, но это делает свою работу.

(->> (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})))

Я уверен, что Уильям Берд может добиться большего успеха.

...