2012-07-23 67 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年中不可用。)