我错过了什么,或者我们有几个不一致/用词不当?

时间:2010-11-13 15:53:11

标签: f#

数学家通常从1开始计数,并调用计数变量n(即"序列的第n项)。计算机科学家通常从0开始计数,并调用计数变量i(即"数组的第i个索引")。这就是为什么我很困惑地得知Seq.nth实际上返回序列" n + 1项#34;

令人困惑的是,Seq.iteri正如其名称所暗示并遍历提供当前索引的序列。

我错过了什么吗?这种用词不当/不一致是否存在理性/历史?或者它只是一个错误(由于我们现在有商业版本可能无法修复)。

修改

不可否认,我对in的传统使用的主张并不严格,我应该对此类主张更加谨慎。但我认为很难否认最常用的语言确实从0开始计数,而ij对于索引变量名称来说肯定是非常受欢迎的选择。所以,当我熟悉使用Seq.iteriSeq.mapi然后遇到Seq.nth时,我认为考虑是合理的,"哦,这个函数的计算方式不同,可能是另一个从1开始计算事物的方式。"

正如我在评论中指出的那样,Seq.iteriSeq.mapiSeq.nth的摘要仅用于强制执行我的假设(请注意智能感知仅为您提供摘要,它没有给出你必须在MSDN上找到的每个参数的描述:

Seq.iter

  

将给定的功能应用于每个   集合的元素。整数   传递给函数表示   元素索引。

Seq.mapi

  

创建一个新的集合   元素是应用的结果   每个给定的函数   该系列的元素。该   传递给函数的整数索引   表示索引(从0开始)   元素正在转变。

Seq.nth

  

计算中的 nth 元素   集合。

注意强调" nth"而不是我的,好像每个人都知道序列中的 nth 元素与 ith 相反元件。

2 个答案:

答案 0 :(得分:4)

谈到历史,nth基于Lisp是零,这可能就是F#函数的命名。查看nth的{​​{3}}。

我没有在数学中找到关于in的陈述是真的;通常n是某个而不是索引的数量。在这种情况下,是调用cdr来获取下一个元素的次数。

答案 1 :(得分:0)

在许多计算机语言中,数组从0开始编制索引,但某些语言从1开始,有些语言允许选择。有些允许将索引范围设置为数组声明的一部分,甚至可以在运行时更改。

数学家很可能从零开始,有时使用其他索引范围,并且对字母' n'没有特别的意义。和'我'。

方法名称Seq.nthSeq.iteri命名不佳。

相关问题