是否有一個函數用於從一個序列中獲取「從x到y」項目?在Clojure中拼接
例如,給出(range 10)
我想[5 6 7 8](從6日到9日,或從6日拿4日)。當然,我可以結合使用幾個函數(例如(take 4 (drop 5 (range 10)))
),但看起來很奇怪,沒有內置的像pythons的mylist[5:9]
。謝謝
是否有一個函數用於從一個序列中獲取「從x到y」項目?在Clojure中拼接
例如,給出(range 10)
我想[5 6 7 8](從6日到9日,或從6日拿4日)。當然,我可以結合使用幾個函數(例如(take 4 (drop 5 (range 10)))
),但看起來很奇怪,沒有內置的像pythons的mylist[5:9]
。謝謝
subvec對於載體,主要是因爲它是O(1)。對於seqs,您將需要使用O(n)的取/下。
從哲學的角度來看,沒有內置運算符的原因是您不需要內置運算符來使它像在Python中一樣感覺「自然」。
(defn splice [coll start stop]
(take (- stop start) (drop start coll)))
(splice coll 6 10)
感覺就像內置了語言,用完全一樣多的「新語法」任何功能。在Python中,特殊的[x:y]
操作符需要語言級別的支持,以使其與單元素訪問器一樣自然。
因此,Clojure不僅沒有讓已經擁擠的語言核心變得混亂,而且爲用戶或圖書館留下了實現這個目標的空間。
(range 5 9)
或(vec (range 5 9))
。
(也許這個range
的語法在2012年中不可用。)