Операция замыкания последовательности - PullRequest
2 голосов
/ 23 марта 2012

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

Предположим, что условие # (>% 0)

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

' (0 1 2 3) возвращает пустое значение seq

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

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

Ответы [ 3 ]

6 голосов
/ 23 марта 2012

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

(take-while #(> % 0) '(1 2 3 0 3 2 0 1))
=> (1 2 3)
3 голосов
/ 23 марта 2012

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

=> (split-with #(> % 0) '(1 2 3 0 3 2 0 1))
[(1 2 3) (0 3 2 0 1)]
2 голосов
/ 25 марта 2012

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

(for [i '(1 2 3 0 3 2 0 1) :while (> i 0)] i)
=> (1 2 3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...