如何比较clojure中两个列表的元素

时间:2015-11-10 10:40:18

标签: list clojure

我想在clojure中比较两个列表,

(def a '(1 2 3 4 5))
(def b '(3 2 7 8 10))

结果(2 3)或(3 2) 通过比较两个列表的元素。

(defn compareList[x, y]
  (do
   (def result '())
   (def i 0)
   (def j 0)
   (while (< i 5) 
     (while (< j 5)
       (if (= (nth x i) (nth y j)) 
         (def result (conj (nth x i) result)))
       (def j (inc j))
     )
   )
   result))


(print (compareList a b))

这是我的代码。 但结果是()。哪里弄错了?求助。

3 个答案:

答案 0 :(得分:6)

使用套装更适合你的情况

(clojure.set/intersection #{1 2 3 4 5} #{3 2 7 8 10})

这将输出#{2 3}

答案 1 :(得分:1)

这听起来像列表理解(使用for宏,它返回一个LazySeq):

(for [a '(1 2 3 4 5) b '(3 2 7 8 10)
  :when
  (= a b)]
  a)

;; => (2 3)

答案 2 :(得分:0)

我同意@turingcomplete的答案。集合仅包含不同的元素。

你可以看到:

user=> (set '(1 1 2 3 2 4 5 5))
#{1 2 3 4 5}

所以我认为你应该接受他的答案是正确的。