Object 对象之间的clojure并集
我如何做这样的特殊合并:(其中特殊合并一个函数,接收两个对象,返回一个对象) =>Object 对象之间的clojure并集,object,clojure,Object,Clojure,我如何做这样的特殊合并:(其中特殊合并一个函数,接收两个对象,返回一个对象) => 谢谢我想你可以做得更好: (defn to-lookup [table] (into {} (for [t table] (apply hash-map ((comp (partial map :v) :c) t))))) (defn create [lookups k] (let [values (for [lookup lookups] (get lookup k nil))
谢谢我想你可以做得更好:
(defn to-lookup [table]
(into {}
(for [t table] (apply hash-map ((comp (partial map :v) :c) t)))))
(defn create [lookups k]
(let [values (for [lookup lookups] (get lookup k nil))
l (map (partial hash-map :v) values)]
{:c (cons (hash-map :v k) l)}))
(defn special-merge [& ts]
(let [lookups (map to-lookup ts)
allkeys (->> lookups (mapcat keys) distinct sort)]
(map (partial create lookups) allkeys)))
输出:
user=> (pprint (special-merge tab-a tab-b))
({:c ({:v 40} {:v nil} {:v 11})}
{:c ({:v 60} {:v nil} {:v nil})}
{:c ({:v 70} {:v 66} {:v 22})})
nil
user=>
你能解释一下得出结果的算法吗?为什么70在结果中只出现一次,而零在结果中出现三次?为什么所有这些地图都只有一个条目?这些数据代表什么?
(defn to-lookup [table]
(into {}
(for [t table] (apply hash-map ((comp (partial map :v) :c) t)))))
(defn create [lookups k]
(let [values (for [lookup lookups] (get lookup k nil))
l (map (partial hash-map :v) values)]
{:c (cons (hash-map :v k) l)}))
(defn special-merge [& ts]
(let [lookups (map to-lookup ts)
allkeys (->> lookups (mapcat keys) distinct sort)]
(map (partial create lookups) allkeys)))
user=> (pprint (special-merge tab-a tab-b))
({:c ({:v 40} {:v nil} {:v 11})}
{:c ({:v 60} {:v nil} {:v nil})}
{:c ({:v 70} {:v 66} {:v 22})})
nil
user=>