Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Object 对象之间的clojure并集_Object_Clojure - Fatal编程技术网

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=>