2012-07-23 44 views
3

是否有一個函數用於從一個序列中獲取「從x到y」項目?在Clojure中拼接

例如,給出(range 10)我想[5 6 7 8](從6日到9日,或從6日拿4日)。當然,我可以結合使用幾個函數(例如(take 4 (drop 5 (range 10)))),但看起來很奇怪,沒有內置的像pythons的mylist[5:9]。謝謝

回答

5

subvec對於載體,主要是因爲它是O(1)。對於seqs,您將需要使用O(n)的取/下。

1

從哲學的角度來看,沒有內置運算符的原因是您不需要內置運算符來使它像在Python中一樣感覺「自然」。

(defn splice [coll start stop] 
    (take (- stop start) (drop start coll))) 

(splice coll 6 10) 

感覺就像內置了語言,用完全一樣多的「新語法」任何功能。在Python中,特殊的[x:y]操作符需要語言級別的支持,以使其與單元素訪問器一樣自然。

因此,Clojure不僅沒有讓已經擁擠的語言核心變得混亂,而且爲用戶或圖書館留下了實現這個目標的空間。

0

(range 5 9)(vec (range 5 9))

(也許這個range的語法在2012年中不可用。)