数学家通常从1开始计数,并调用计数变量n
(即"序列的第n项)。计算机科学家通常从0开始计数,并调用计数变量i
(即"数组的第i个索引")。这就是为什么我很困惑地得知Seq.nth
实际上返回序列" n + 1项#34;
令人困惑的是,Seq.iteri
正如其名称所暗示并遍历提供当前索引的序列。
我错过了什么吗?这种用词不当/不一致是否存在理性/历史?或者它只是一个错误(由于我们现在有商业版本可能无法修复)。
修改
不可否认,我对i
和n
的传统使用的主张并不严格,我应该对此类主张更加谨慎。但我认为很难否认最常用的语言确实从0开始计数,而i
和j
对于索引变量名称来说肯定是非常受欢迎的选择。所以,当我熟悉使用Seq.iteri
和Seq.mapi
然后遇到Seq.nth
时,我认为考虑是合理的,"哦,这个函数的计算方式不同,可能是另一个从1开始计算事物的方式。"
正如我在评论中指出的那样,Seq.iteri
,Seq.mapi
和Seq.nth
的摘要仅用于强制执行我的假设(请注意智能感知仅为您提供摘要,它没有给出你必须在MSDN上找到的每个参数的描述:
Seq.iter
将给定的功能应用于每个 集合的元素。整数 传递给函数表示 元素索引。
Seq.mapi
创建一个新的集合 元素是应用的结果 每个给定的函数 该系列的元素。该 传递给函数的整数索引 表示索引(从0开始) 元素正在转变。
Seq.nth
计算中的 nth 元素 集合。
注意强调" nth"而不是我的,好像每个人都知道序列中的 nth 元素与 ith 相反元件。
答案 0 :(得分:4)
谈到历史,nth
基于Lisp是零,这可能就是F#函数的命名。查看nth
的{{3}}。
我没有在数学中找到关于i
和n
的陈述是真的;通常n是某个而不是索引的数量。在这种情况下,是调用cdr
来获取下一个元素的次数。
答案 1 :(得分:0)
在许多计算机语言中,数组从0开始编制索引,但某些语言从1开始,有些语言允许选择。有些允许将索引范围设置为数组声明的一部分,甚至可以在运行时更改。
数学家很可能从零开始,有时使用其他索引范围,并且对字母' n'没有特别的意义。和'我'。
方法名称Seq.nth
和Seq.iteri
命名不佳。