2012-03-23 213 views
2

如何从旧的序列得到一个新的序列中,新的元素是从旧的,直到一个条件满足Clojure的顺序操作

假设条件是#(>%0)

'(1 2 3 0 3 2 0 1)返回1,2,3

'(0 1 2 3)返回空SEQ

“(1 2 3)返回的一切。

注意它与过滤器不一样。

回答

6

你可能想使用take-while

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

甚至'(取而POS“(1 2 3 0 3 2 0 1) )',在这个特定的情况下。 – sanityinc 2012-03-23 11:18:07

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)