2012-03-23 222 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)