是否有一个函数可以在序列中获取“从x到y”的项目?
例如,给定(range 10)
我想要[5 6 7 8](从第6到第9,或从第6开始拿4)。当然,我可以通过几个函数(例如(take 4 (drop 5 (range 10)))
)的组合来实现这一点,但似乎很奇怪,没有像pythons mylist[5:9]
这样的内置函数。感谢
答案 0 :(得分:6)
subvec,主要是因为它是O(1)。对于seqs,您需要使用O / n of take / drop。
答案 1 :(得分:1)
从哲学的角度来看,没有内置运算符的原因是你不需要内置的运算符来让它感觉像在Python中那样“自然”。
(defn splice [coll start stop]
(take (- stop start) (drop start coll)))
(splice coll 6 10)
感觉就像内置语言一样,具有与任何功能一样多的“新语法”。在Python中,特殊的[x:y]
运算符需要语言级支持才能使其感觉像单元素访问器一样自然。
因此,Clojure不会让(已经拥挤的)语言核心变得混乱,只是为用户或库留出了空间,以便在需要时实现此目的。
答案 2 :(得分:0)
(range 5 9)
或(vec (range 5 9))
。
(也许这个range
的语法在2012年中期无法使用。)