Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Счётчик цикла и Фортран

Что-то захотелось на Фортран поближе взглянуть, не знаю уж чем он меня заинтересовал, возможно тем, что во времена учёбы в Университете постоянно про него слышал (всё-таки язык для научных вычислений, а я на математика учился), но использовать не довелось.

Пока только-только начинаю знакомиться, для практики переписал с Бейсика на Фортран одну из версий игры 1970 года «Highnoon», наверное выложу её попозже на «Гитхаб».

У языка много особенностей, но больше всего интересна следующая. Фортран — язык со статической типизацией, то есть для каждой переменной требуется указать тип, но в некоторых случаях компилятор может вывести тип самостоятельно. Правда, думаю, правило вывода этого типа сильно вас удивит.

В этой простой программе тип переменной I не указан, но компилятор знает, что её тип — integer.

DO I = 99, 1, -1
    PRINT *, I
END DO

END

Дело в том, что по-умолчанию (это поведение можно отключить) Фортран считает все переменные, имена которые начинаются с букв I, J, K, L, M или N целыми (integer), а все остальные — типом real.

Есть мнение, что отсюда и пошла привычка называть переменные цикла буквами из «целого» ряда.

6 комментариев
hshhhhh.name 2020

Фортран считает все переменные, имена которые начинаются с букв I, J, K, L, M или N

Забавное поведение если только эти имена бы считались интами, такой себе сахар, но вот если «начинаются с» это прямо странноватая дичь какая-то.

Евгений Степанищев 2020

Мало того, можно свои собственные буквы выбрать для типов, например вот как задаётся значение по-умолчанию:

implicit integer (i-n), real (a-h, o-z)

Имярекъ 2020

Я всегда думал, что i это Iterator.
Но вашу теорию может подтвердить также то, что когда надо крутить еще и вложенный цикл, его итератор в классических пособиях называют J.

Евгений Степанищев 2020

Ну, теория не моя )

Лёша Захарченко 2020

На первый взгляд, кажется, что совсем наоборот, т. к. счетчики цикла обычно называли i,j,k, то разработчики Фортрана добавили такую эвристику.

Осмелюсь предположить, что i,j,k в программирование могли взять из математики, где из используют как единичные вектора, но почему взяли именно их — черт его знает, можно попробовать Hillelogram из твиттера спросить, он вроде как разбирается в истории языков.

Евгений Степанищев 2020

Возможно, не исключено, что мы этого уже никогда не узнаем, есть и более массовые штуки, которые вымылись из народной памяти полностью (надо будет как-нибудь рассказать об одной такой загадке, у меня есть хороший пример).

Лёша Захарченко 2020

Полез посмотреть и английская вики, кажется, подтверждает мои предположения.

hshhhhh.name 2020

Полез посмотреть и английская вики, кажется, подтверждает мои предположения.

так ведь и русская (по предоставленной ссылке) тоже это подтверждает:

Подобная практика также закрепилась в математической записи, где индексы суммы и умножения часто обозначаются i, j и т. д.

AlexD 2020

О, расскажите про загадку, которая вымылась из народной памяти.

Евгений Степанищев 2020

Да, надо пост сделать будет )