2014-02-03 2 views
3

В Clojure есть простой/идиоматический способ проверить, включена ли данная последовательность в другую последовательность? Что-то вроде:Clojure: как проверить, является ли seq «подсектором» другого seq

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

(где subseq? теоретическая функция, которая будет делать то, что я описываю)

Кажется, что нет такой функции в ядре или других библиотек Clojure ... при условии, что это true, существует ли относительно простой способ реализации такой функции?

+0

примечание есть функция после- в ядре, он не может делать то, что вы хотите, хотя - http://clojuredocs.org/clojure_core/clojure.core/subseq – georgek

+0

я увидел, что .. эта функция является чем-то еще полностью. –

ответ

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

Точно, что я искал - спасибо! –

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

Это хорошо, но в нем будет использоваться понятие Java, а не Clojure. например, '(subseq [[1]] '((1)))' вернет false, а не true. – amalloy

 Смежные вопросы

  • Нет связанных вопросов^_^