【发布时间】:2018-09-25 07:18:42
【问题描述】:
在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}?
【问题讨论】:
-
当最小密钥集已知时,为什么要使用
featurec?为什么不(== q {:foo a :bar 2})? -
在更复杂的(甚至可能是递归的)关系中,一些
featurec子句可能只出现在某些解决方案中;例如,conde子句每个都引入不同的featurec约束。我已经更新了这个问题来举例说明。
标签: clojure logic-programming clojure-core.logic minikanren