请原谅我的新手问题和可能不正确的术语。
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.substring
和 java.util.List.subList
都具有独占端索引。