为什么 Clojure 向量函数结果会排除停止值



请原谅我的新手问题和可能不正确的术语。

Clojure 向量函数生成的值不包括停止值。 例如:

=> (subvec [:peanut :butter :and :jelly] 1 3)
[:butter :and]
=> (range 1 5)
(1 2 3 4)

范围的文档明确说明了这一点,但没有给出理由:"......返回从开始(包括)到结束(排除)的编号的延迟序列..."。

在 Ruby 中,这些操作是包含的:

(1..5).to_a => [1, 2, 3, 4, 5] [:p果冻, :黄油, :和, :果冻][1,3] => [:黄油, :和, :果冻]

显然,这些是非常不同的语言,但我想知道除了语言设计者的个人偏好之外,是否有一些潜在的原因?

将结束独占化允许您执行诸如将(count collection)指定为终结点之类的操作,而无需获取 NPE。这就是两种方法之间最大的区别。

选择

索引可能是为了与 Java 库保持一致。 java.lang.String.substringjava.util.List.subList 都具有独占端索引。

最新更新