是否有一个函数用于从一个序列中获取“从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年中不可用。)