2012-03-23 2 views
2

Как получить новую последовательность из старой последовательности, элементы нового взяты из старого, пока условие не будет выполненоClojure последовательностей операций

Пусть условие # (>% 0)

'(1 2 3 0 3 2 0 1) возвращает 1, 2, 3

' (0 1 2 3) возвращает пуст НомерСтарта

«(1 2 3) возвращает все.

Обратите внимание, что это не то же самое, что фильтр.

ответ

6

Вы, вероятно, хотите использовать take-while: ответ

(take-while #(> % 0) '(1 2 3 0 3 2 0 1)) 
=> (1 2 3) 
+2

Или даже '(взять-то время поз«(1 2 3 0 3 2 0 1)) ', в этом конкретном случае. – sanityinc

3

mikera выглядит хорошо, но также рассмотреть вопрос о split-with, если вам нужно сделать дальнейшую обработку на остальной части списка.

=> (split-with #(> % 0) '(1 2 3 0 3 2 0 1)) 
[(1 2 3) (0 3 2 0 1)] 
2

Это радость Clojure: Есть так много способов кожи кошки:

(for [i '(1 2 3 0 3 2 0 1) :while (> i 0)] i) 
=> (1 2 3) 
Смежные вопросы