这是我关于堆栈溢出的第一个问题。
我对逻辑编程很陌生,并试图评估它是否可以用来解决我正在研究的一些匹配问题。
问题:
假设我们有一个A组,看起来像这样。
A = {1, 2, 3, 4}然后我们还有其他一些看起来像这样的场景。
B = {1, 2}
C = {3, 5, “banana"}
D = {2, 3, 4}我想解决的问题是,
“与我们所知道的其他组相比,找出与A组共享成员最多的组。”
在这种情况下,答案应该是D,因为它与集合A共享三个成员,而其他只与A共享两个和一个成员的集合。
问题1:
逻辑编程能解决这类问题吗?
问题2:
如果可以的话,您将如何在Clojure的core.logic中这样做?
发布于 2015-05-31 17:10:00
契士
下面显示了使用clojure.set获得最佳拟合结果
(ns
sample.sandbox
(:require [clojure.set :as set])
)
(def A #{ 1, 2, 3, 4})
(def B #{1, 2})
(def C #{3, 5, "banana"})
(def D #{2, 3, 4})
(defn best-fit-set
[control & sets]
(apply max-key count (map #(set/intersection control %) sets )))
(best-fit-set A B C D) => #{4 3 2}https://stackoverflow.com/questions/30558297
复制相似问题