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
List 如何组合两个列表中的元素_List_Clojure_Maps - Fatal编程技术网

List 如何组合两个列表中的元素

List 如何组合两个列表中的元素,list,clojure,maps,List,Clojure,Maps,我想合并两个列表中的元素,我的程序如下所示 (ns datamodel (:use [net.cgrand.enlive-html :as en-html ]) (:require [clojure.zip :as z] [clojure.data.zip.xml :only (attr text xml->) :as xz] [clojure.xml :as xml ] [clojure.data.zip.xml :as zf] [clojure.java.io :as io]

我想合并两个列表中的元素,我的程序如下所示

(ns datamodel

(:use 
[net.cgrand.enlive-html :as en-html ])
(:require
[clojure.zip :as z] 
[clojure.data.zip.xml :only (attr text xml->) :as xz]
[clojure.xml :as xml ]
[clojure.data.zip.xml :as zf]
 [clojure.java.io :as io]
))
(def data-url "http://api.eventful.com/rest/events/search?app_key=4H4Vff4PdrTGp3vV&keywords=music&location=Belgrade&date=Future")
(defn map-tags-contents [url & tags]
  (map #(hash-map % (keyword (last tags)))
   (mapcat (comp :content z/node)
      (apply xz/xml->
             (-> url xml/parse z/xml-zip)
              (for [t tags]
                 (zf/tag= t)
               )))))
(def titles (map-tags-contents data-url :events :event :title))
(def descriptions (map-tags-contents data-url :events :event :description))
(defn create-map [](for [el1 titles 
  el2 descriptions] (into {} (conj el1 el2 ))))
(defn create-map [](map conj titles descriptions ))

但当我调用createmap时,列表中的结果映射是重复的。我看到我得到了笛卡尔连接,因为我没有说元素组合的方式。我希望第一个映射中的第一个元素和第二个映射中的第一个元素合并,第一个映射中的第二个元素和第二个映射中的第二个元素合并,等等。

元素组合

(map list [1 2 3] [:a :b :c]) ;=> ((1 :a) (2 :b) (3 :c))
笛卡尔积

(for [x [1 2 3], y [:a :b :c]] (list x y))
;=> ((1 :a) (1 :b) (1 :c) (2 :a) (2 :b) (2 :c) (3 :a) (3 :b) (3 :c))

所以fn应该是这样的

(ns datamodel

(:use 
[net.cgrand.enlive-html :as en-html ])
(:require
[clojure.zip :as z] 
[clojure.data.zip.xml :only (attr text xml->) :as xz]
[clojure.xml :as xml ]
[clojure.data.zip.xml :as zf]
 [clojure.java.io :as io]
))
(def data-url "http://api.eventful.com/rest/events/search?app_key=4H4Vff4PdrTGp3vV&keywords=music&location=Belgrade&date=Future")
(defn map-tags-contents [url & tags]
  (map #(hash-map % (keyword (last tags)))
   (mapcat (comp :content z/node)
      (apply xz/xml->
             (-> url xml/parse z/xml-zip)
              (for [t tags]
                 (zf/tag= t)
               )))))
(def titles (map-tags-contents data-url :events :event :title))
(def descriptions (map-tags-contents data-url :events :event :description))
(defn create-map [](for [el1 titles 
  el2 descriptions] (into {} (conj el1 el2 ))))
(defn create-map [](map conj titles descriptions ))
感谢@A.韦伯