Clojure:如何测试seq是否是另一个seq的“subseq”

时间:2014-02-03 20:38:23

标签: clojure sequence sequences seq

在Clojure中是否有一种简单/惯用的方法来测试给定序列是否包含在另一个序列中?类似的东西:

(subseq? [4 5 6] (range 10))  ;=> true
(subseq? [4 6 5] (range 10))  ;=> false
(subseq? "hound" "greyhound") ;=> true

(其中subseq?是一个理论函数,可以完成我所描述的)

似乎核心或其他Clojure库中没有这样的函数......假设这是真的,是否有一种相对简单的方法来实现这样的函数?

2 个答案:

答案 0 :(得分:6)

(defn subseq? [a b]
  (some #{a} (partition (count a) 1 b)))

答案 1 :(得分:2)

(defn subseq? [target source] 
  (pos? (java.util.Collections/indexOfSubList (seq source) (seq target))))