我想在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))
这是我的代码。 但结果是()。哪里弄错了?求助。
答案 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}
所以我认为你应该接受他的答案是正确的。