Clojure中的拼接

Clojure中的拼接,clojure,Clojure,是否有一个单独的函数用于获取序列中的“从x到y”项 例如,给定(范围10)我想要[5 6 7 8](从第6位到第9位,或从第6位到第4位,)。当然,我可以通过几个函数的组合(例如(取4(降5(范围10)))来实现这一点,但奇怪的是,没有像pythons的mylist[5:9]那样的内置函数。感谢向量,主要是因为它是O(1)。对于seqs,您需要使用take/drop的O(n)。从哲学的角度来看,没有内置操作符的原因是您不需要内置操作符来让它感觉像Python中那样“自然” (defn splic

是否有一个单独的函数用于获取序列中的“从x到y”项


例如,给定
(范围10)
我想要[5 6 7 8](从第6位到第9位,或从第6位到第4位,)。当然,我可以通过几个函数的组合(例如
(取4(降5(范围10))
)来实现这一点,但奇怪的是,没有像pythons的
mylist[5:9]
那样的内置函数。感谢向量,主要是因为它是O(1)。对于seqs,您需要使用take/drop的O(n)。

从哲学的角度来看,没有内置操作符的原因是您不需要内置操作符来让它感觉像Python中那样“自然”

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

(splice coll 6 10)
感觉就像是一种内置语言,具有与任何功能一样多的“新语法”。在Python中,特殊的
[x:y]
操作符需要语言级别的支持,以使其感觉像单元素访问器一样自然

因此,Clojure没有把(已经很拥挤的)语言核心弄得乱七八糟,而是为用户或库留出空间,让他们在需要时实现它。

(范围59)
,或
(vec(范围59))

(可能在2012年年中,
range
的这种语法不可用。)