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

List 如何比较clojure中两个列表的元素,list,clojure,List,Clojure,我想比较clojure中的两个列表 (def a '(1 2 3 4 5)) (def b '(3 2 7 8 10)) 得出一个结果(23)或(32) 通过比较两个列表的元素 (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))

我想比较clojure中的两个列表

(def a '(1 2 3 4 5))
(def b '(3 2 7 8 10))
得出一个结果(23)或(32) 通过比较两个列表的元素

(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))
(定义比较列表[x,y]
(做
(def结果'())
(def i 0)
(def j 0)
(而(
这是我的密码。
但结果是()。我哪里错了?请帮忙。

使用一套更适合您的情况

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

这将输出
{23}

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


我同意@turingcomplete的回答。一个集合只包含不同的元素

你可以看到:

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

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

你想要两个列表中的元素吗?是的!!!!在两个列表中都有一个新的列表为什么你不把两个集合相交?记住集合是一种序列,这通常是你想要的列表。您还可以对集合使用
cons
(cons 3{1 2})
计算结果为
(3 1 2)
.aaah,因此它确实有一个for循环。谢谢你,朋友。我能懒洋洋地做吗?e、 g.我的输入是
(def a'(12345))(def b(范围))
user=> (set '(1 1 2 3 2 4 5 5))
#{1 2 3 4 5}