Ограничить результаты запроса core.logi c? - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь смоделировать график с использованием core.logi c и хотел бы сопоставить все узлы, которые имеют ребра, с двумя другими узлами. Я придумал ниже, но он возвращает два результата вместо желаемого, так как [2 3 4] и [2 4 3] эквивалентны. Как бы я ограничил запрос, чтобы вернуть только желаемый результат?

(use 'clojure.core.logic.pldb)

(db-rel edge a b)

(def g
  (db
   [edge 1 2]
   [edge 2 3]
   [edge 3 4]
   [edge 2 4]))

(with-db g
  (run* [q]
    (fresh [x y z]
      (edge x y)
      (edge x z)
      (!= y z)
      (== q [x y z]))))

1 Ответ

0 голосов
/ 17 апреля 2020

Предполагая, что вам все равно, какой из двух результатов вы получите, проще всего заменить вызов (run * [q] на (run 1 [q], где 1 означает, что вам нужен только один) результат возвращен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...