是否有一个函数可以按顺序获取“从 x 到 y”的项目?
例如,给定(range 10)
我想要 [5 6 7 8] (从第 6 个到第 9 个,或从第 6 个中取 4)。当然,我可以结合几个函数(例如(take 4 (drop 5 (range 10)))
)来实现它,但似乎很奇怪,没有像 pythons 那样的内置函数mylist[5:9]
。谢谢
是否有一个函数可以按顺序获取“从 x 到 y”的项目?
例如,给定(range 10)
我想要 [5 6 7 8] (从第 6 个到第 9 个,或从第 6 个中取 4)。当然,我可以结合几个函数(例如(take 4 (drop 5 (range 10)))
)来实现它,但似乎很奇怪,没有像 pythons 那样的内置函数mylist[5:9]
。谢谢
向量的subvec,主要是因为它是 O(1)。对于 seq,您将需要使用取/放的 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))
.
(也许这种语法 forrange
在 2012 年年中不可用。)