Счётчик цикла и Фортран
Что-то захотелось на Фортран поближе взглянуть, не знаю уж чем он меня заинтересовал, возможно тем, что во времена учёбы в Университете постоянно про него слышал (всё-таки язык для научных вычислений, а я на математика учился), но использовать не довелось.
Пока только-только начинаю знакомиться, для практики переписал с Бейсика на Фортран одну из версий игры 1970 года «Highnoon», наверное выложу её попозже на «Гитхаб».
У языка много особенностей, но больше всего интересна следующая. Фортран — язык со статической типизацией, то есть для каждой переменной требуется указать тип, но в некоторых случаях компилятор может вывести тип самостоятельно. Правда, думаю, правило вывода этого типа сильно вас удивит.
В этой простой программе тип переменной I не указан, но компилятор знает, что её тип — integer.
DO I = 99, 1, -1
PRINT *, I
END DO
END
Дело в том, что по-умолчанию (это поведение можно отключить) Фортран считает все переменные, имена которые начинаются с букв I, J, K, L, M или N целыми (integer), а все остальные — типом real.
Есть мнение, что отсюда и пошла привычка называть переменные цикла буквами из «целого» ряда.
Забавное поведение если только эти имена бы считались интами, такой себе сахар, но вот если «начинаются с» это прямо странноватая дичь какая-то.
Мало того, можно свои собственные буквы выбрать для типов, например вот как задаётся значение по-умолчанию:
Я всегда думал, что i это Iterator.
Но вашу теорию может подтвердить также то, что когда надо крутить еще и вложенный цикл, его итератор в классических пособиях называют J.
Ну, теория не моя )
На первый взгляд, кажется, что совсем наоборот, т. к. счетчики цикла обычно называли i,j,k, то разработчики Фортрана добавили такую эвристику.
Осмелюсь предположить, что i,j,k в программирование могли взять из математики, где из используют как единичные вектора, но почему взяли именно их — черт его знает, можно попробовать Hillelogram из твиттера спросить, он вроде как разбирается в истории языков.
Возможно, не исключено, что мы этого уже никогда не узнаем, есть и более массовые штуки, которые вымылись из народной памяти полностью (надо будет как-нибудь рассказать об одной такой загадке, у меня есть хороший пример).
Полез посмотреть и английская вики, кажется, подтверждает мои предположения.
так ведь и русская (по предоставленной ссылке) тоже это подтверждает:
О, расскажите про загадку, которая вымылась из народной памяти.
Да, надо пост сделать будет )