Математики обычно считают, начиная с 1, и называют счетную переменную n
(т. Е. «N-ным членом последовательности»). Специалисты-компьютерщики обычно считают, начиная с 0, и называют счетную переменную i
(т. Е.индекс массива "). Вот почему я был смущен, узнав, что Seq.nth
на самом деле возвращает" n + 1 член последовательности ".
Вдвойне запутанно то, что Seq.iteri
делает то, что следует из его названияи пересекает последовательность, предоставляющую текущий индекс.
Я что-то упустил? Есть ли рациональная / история для этого неправильного числа / несоответствия? Или это была просто ошибка (которая, вероятно, не может быть исправлена, так как у нас естькоммерческий выпуск).
Редактировать
По общему признанию, мое утверждение об обычном использовании i
и n
не является строго верным, и я должен был быть более осторожнымтакое утверждение. Но я думаю, что трудно отрицать, что наиболее популярные языки начинают считать с 0 и что i
и j
, безусловно,чрезвычайно популярный выбор имен индексных переменных.Итак, когда я знаком с использованием Seq.iteri
и Seq.mapi
, а затем сталкиваюсь с Seq.nth
, я думаю, что разумно подумать: «О, эта функция считает по-другому, возможно, другие способы подсчитываются, начиная с 1."
И, как я указывал в комментариях, сводки для Seq.iteri
, Seq.mapi
и Seq.nth
только подтвердили мое предположение (обратите внимание, что intellisense дает только сводки, это недать вам описание каждого параметра, который вы должны найти в MSDN):
Seq.iter
Применяет данную функцию к каждому элементу коллекции.Целое число, переданное функции, указывает индекс элемента.
Seq.mapi
Создает новую коллекцию, элементами которой являются результаты применения данной функции к каждому изэлементы коллекции.Целочисленный индекс, переданный функции, указывает индекс (от 0) преобразовываемого элемента.
Seq.nth
Вычисляет элемент nth в сборнике.
Обратите внимание на акцент "nth", а не на мой, как будто все знают, что элемент nth в последовательностях отличается от ih элемент.