4

是否有一个函数可以按顺序获取“从 x 到 y”的项目?

例如,给定(range 10)我想要 [5 6 7 8] (从第 6 个到第 9 个,或从第 6 个中取 4)。当然,我可以结合几个函数(例如(take 4 (drop 5 (range 10))))来实现它,但似乎很奇怪,没有像 pythons 那样的内置函数mylist[5:9]。谢谢

4

3 回答 3

6

向量的subvec,主要是因为它是 O(1)。对于 seq,您将需要使用取/放的 O(n)。

于 2012-07-23T07:29:36.737 回答
1

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

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

(splice coll 6 10)

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

因此,Clojure 并没有把(已经很拥挤的)语言核心弄得乱七八糟,而是简单地为用户或库留出了空间来实现它,如果你想要的话。

于 2012-07-23T18:05:12.457 回答
0

(range 5 9), 或(vec (range 5 9)).

(也许这种语法 forrange在 2012 年年中不可用。)

于 2013-12-01T06:28:49.380 回答