Что означает йота из std :: йота?


152

Я предполагаю, что «i» - это приращение, а «a» - это присваивание, но я не мог понять или найти ответ. Кроме того, он очень похож на нестандартный, itoaчто, на мой взгляд, сбивает с толку.


11
Возможно от APL? Греческая буква йота использовалась для создания вектора последовательных целых чисел.
— cmbuckley

3
Если вы думаете, что это сбивает с толку, Google Go создает iotaспециально объявленный идентификатор <s> keyword </s>, значение которого увеличивается один раз для каждого определения, но только когда вы определяете константы.
— Potatoswatter

3
Договорились о itoaнеразберихе; У меня была такая же мысль.
— NHDaly


1
Забавно, я почему-то подумал, что это название произошло от слова «атой» наоборот - что-то вроде обратного. Хотя это не имеет смысла.
— Петтер

Ответы:


191

Из исходной документации SGI STL :

Название iota взято из языка программирования APL.

В своей лекции по Премии Тьюринга Кен Айверсон (изобретатель APL) сказал следующее:

Например, целочисленная функция, обозначенная как, ιпроизводит вектор первых nцелых чисел при применении к аргументу n,…

То ιесть прописная греческая буква йота .

В приведенном выше цитате, я напечатал ι, U + 03B9, «ГРЕЧЕСКИЙ МАЛЕНЬКАЯ БУКВА IOTA» , но на самом деле Unicode имеет специальную кодовую точку для йота APL в: ⍳это U + 2373, «APL ФУНКЦИОНАЛЬНОГО SYMBOL IOTA» .


В ответ на требования комментаторов я рассмотрю этимологию слова «йота» в этом контексте.

Наиболее вероятный ответ заключается в том, что Кен Айверсон хотел символ, который напоминал бы пользователю слово «целое число» и использование буквы «i» в качестве типичной целочисленной переменной, особенно для индексации массива.

Но предположим, что здесь есть более глубокий смысл.

Согласно Оксфордскому словарю английского языка, «йота» - это «название греческой буквы Ι, ι, соответствующей римскому I, i; наименьшая буква греческого алфавита »(наименьшая физически, а не в алфавитном порядке, как я полагаю), а также означает« наименьшую или очень маленькую частицу или количество ». Самое раннее известное использование этого значения в OED взято из Clavis mystica Дэниела Фитли в 1636 году:

Сможем ли мы потерять или ловко пройти мимо хоть на йоту или на строчку Книги Бога?

Clavis mystica - это путеводитель по частям Библии, и это предложение, в частности, относится к Матфея 5:18. В версии Короля Иакова от 1611 года есть этот текст от Матфея 5:18 :

Матфея 5:18

Транскрипция:

Ибо истинно говорю вам: пока не пройдут небо и земля, ни одна власть или один титул никоим образом не выйдет из закона, пока все не исполнятся.

OED дает «iote» как другую форму «йота», которая (как и «йота») происходит от греческого слова «ἰῶτα», которое является греческим названием рассматриваемой буквы. Почему Фитли изменил «iote» на «йота»? К сожалению, у меня нет копии Clavis mystica в моей личной библиотеке, поэтому я не могу исследовать это дальше.

В оригинальном греческом тексте Матфея 5:18 «iote» означает «ἰῶτα», а «титул» (или, в более современном смысле, «титул») - «κεραία». Слово «κεραία» примерно означало «засечки» или «апостроф». Итак, этот библейский стих обращается к идее мельчайших деталей и использует «ἰῶτα» для обозначения буквы йота в ее роли как физически наименьшей буквы греческого алфавита.

Таким образом, мы можем сделать вывод, что функция STL iotaи ее антецедент APL ⍳названы в Библии после физически наименьшей буквы греческого алфавита «ι», поскольку эти функции производят целые числа, разделенные наименьшим значением, на которое целые числа могут быть отделенным.

Согласно Википедии , греческая буква йота произошла от финикийской буквы йуд.

Это настолько далеко от программирования, насколько я хочу сейчас ответить на этот вопрос.


6
Так почему вы допустили опечатку? ;-)
— subub

7
Но это лишь немного отодвигает вопрос: почему APL вызвал эту функцию ⍳?
— Daniel H

1
Я думал, что APL использует йоту, потому что, по крайней мере, на английском, это примерно означает наименьшее измеримое количество (например, «Меня не волнует ни одна йота »).
— Адриан МакКарти,

Классный дискурс! Позвольте мне здесь прокомментировать ваше обсуждение "йота" против "йоте" против "йота". В древнем языке не было различия между буквами I и J. J не в греческом алфавите и не в римском, поэтому в основном все 3 транскрипции относились к одной и той же букве. В статье WP говорится: «Первая англоязычная книга, в которой проводится четкое различие между i⟩ и ⟨j⟩, была опубликована в 1633 году», что на 22 года позже, чем книга, на которую вы ссылаетесь.
— Peter K

30

Это греческая буква, которая иногда используется в математике для обозначения наборов чисел или единичных векторов. В случае C ++ вы получаете сконструированный набор векторов. Ничего общего с итоа.


23

std::iota заполнит диапазон итератора последовательно увеличивающимися значениями.

Чтобы ответить на ваш конкретный вопрос, это на самом деле ничего не означает. Йота (произносится как «ай-о-ду» или «ай-о-ту» на английском) - греческое письмо с математическим подтекстом.

Это стандарт в C ++ 11, но не в более ранних стандартах.


3
Большинство не говорящих по-английски, и я не произносю это «ай-о-
— ду

глаз-яхта-а? Мне плевать ни на йоту (правда) :)
— Will

5
@ LưuVĩnhPhúc Я могу подтвердить, что по крайней мере один носитель английского языка тоже не произносит это "eye-oh-duh" - я говорю "eye-oh-tuh" (где "uh" - это недифференцированная гласная 'ə' в середине «math-ə-matical»)
— Мартин Боннер поддерживает Монику

4

О, у меня всегда было впечатление, что, по std::iota(start,end,0)сути, это означает

for(size_t i = 0; i < std::distance(start, end) ; i++) { start[i] = i; }

тогда вы по существу «присваиваете i» каждому элементу массива, а iota - греческое значение i, так что вот так.

(Я не удивлюсь , если это было обоснование выбора APL, упомянутые в @ robmayoff - х ответа , хотя я понятия не имею , что это ли дело.)


1

Цитирую с этой страницы: iotashaming, где вы можете найти больше по этой теме.

На STL большое влияние оказала работа Кена Айверсона над APL. В лекции Кена о премии Тьюринга 1979 года вы найдете эту фразу:

«Например, целочисленная функция, обозначенная ι, дает вектор из первых N целых чисел».

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.