Xiu*_* Xu 3 tail-recursion clojure
我有两个序列,可以是矢量或列表.现在我想返回一个序列,其元素与两个序列不相同.
这是一个例子:
(removedupl [1 2 3 4] [2 4 5 6]) = [1 3 5 6]
(removeddpl [] [1 2 3 4]) = [1 2 3 4]
Run Code Online (Sandbox Code Playgroud)
我现在很困惑.这是我的代码:
(defn remove-dupl [seq1 seq2]
(loop [a seq1 b seq2]
(if (not= (first a) (first b))
(recur a (rest b)))))
Run Code Online (Sandbox Code Playgroud)
但我不知道接下来该做什么.
我鼓励你在集合操作方面考虑这个问题
(defn extrasection [& ss]
(clojure.set/difference
(apply clojure.set/union ss)
(apply clojure.set/intersection ss)))
Run Code Online (Sandbox Code Playgroud)
这样的表述假定输入是集合.
(extrasection #{1 2 3 4} #{2 4 5 6})
=> #{1 6 3 5}
Run Code Online (Sandbox Code Playgroud)
通过在列表,序列或向量上调用(set ...)函数可以轻松实现这一点.
即使您更喜欢坚持使用面向序列的解决方案,请记住,如果您扫描两个序列[除非它们已排序],搜索这两个序列都是O(n*n)任务.可以在一次传递中构建集合,并且查找非常快.检查重复项是使用集合的O(nlogn)任务.