while (1) {
if (1+1==2) {
print "Yes, you paid attention in Preschool!";
} else {
print "Wait... I thought 1+1=2";
}
}
Как разработчик, мы все должны использовать циклы очень часто. Мы знаем это. Что мне было интересно, так это то, кто думал об идее иметь петли? На каком языке введены циклы? Какой была первая конструкция цикла? Это была while
петля? for
Цикл? и т.д?
repeat
бы другуюrepeat
- вы бы никогда не закончили. Я думаю, что, возможно, женщины читают инструкции по использованию шампуня таким образом, но мужчины читают это как итерацию, и им нужно всего несколько минут, чтобы вымыть волосы.Ответы:
Как отметили Мувичиэль и Эмилио Гаравалья , концепция предшествует компьютерным вычислениям. Тем не менее, первым экземпляром программного цикла был цикл Ада Лавлейс, использованный для вычисления чисел Бернулли , как описано в примечании G ее перевода « Эскиза аналитического механизма, изобретенного Чарльзом Бэббиджем » Л. Ф. Менабреа . Способность Аналитического Механизма к циклу уже отмечена Менабреа:
Механизм зацикливания Аналитического двигателя непосредственно унаследован от механического ткацкого станка Джозефа Мари Жаккарда (1801), как отмечено в мемуарах Менабреа:
Жаккардовый ткацкий станок - это очень раннее применение цикла в контексте заказа машины для получения повторного вывода :
Жаккардовый ткацкий станок также считается очень ранней формой хранимой программы :
Чарльз Бэббидж также адаптировал процедуру хранения Жаккарда в Аналитическом движке , наличие или отсутствие отверстия сообщало машине простую команду включения-выключения:
Условные ветви Analytical Engine в сочетании с механическими петлями и процедурой хранения, вдохновленными Жаккардом, очень похожи (концептуально) на ваш пример, особенно если мы добавим принтер Бэббиджа в смесь для
print "...";
деталей.Очевидно, что механические петли предшествуют ткацкому станку Жаккарда, первое известное устройство, работающее по принципу петли, представляющее собой механизм Antikythera (100 г. до н.э.), и, если мы заглянем еще дальше в историю (и рискну ужасно не по теме), солнечные часы , вероятно, являются самыми старыми искусственными механизмами. где понимание петель очевидно, следуя, конечно, повторяющейся схеме орбит Солнца и других звездных тел.
Тем не менее, я думаю, что в контексте вычислений (а не вычислений или чего-либо еще), алгоритм Analytical Engine и алгоритм вычисления чисел Аду Бернулли могут быть зачтены для введения циклов, разделяя, по крайней мере, некоторую часть заслуг с жаккардовым станком, непосредственно адаптировав концепцию из Это.
источник
Циклы предшествуют вычислениям. Вы можете найти их в нотной записи еще в григорианском пении:
источник
Понятие «сделай это снова» каким-то образом «примитивно» для человеческого восприятия. Вы можете сказать это ребенку, который только что выработал минимальное понимание естественного языка.
В дискретных системах петли обнаруживаются во всех конечных автоматах, когда вы признаете, что можете достичь состояния, в котором вы уже были .
Самый простой цикл - это цикл между двумя состояниями (часы). Учитывая, что любое большее количество состояний может быть результатом подсчета с него, каждая более сложная машина создается на «счетчике», увеличиваемом часами, которые могут «прыгать» на определенные флаги, представляющие определенные комбинаторные операции. Это ядро машины фон Неймана, на которой основан каждый микропроцессорный компьютер.
В машинном коде закодирован переход
JP-Z-nnnn
(где Z - любой флаг, на котором основано ваше условие). На языке более высокого уровня это почти сразу переводится наЦикл - это не что иное,
goto
как метка x, предшествующая самой инструкции goto.Любая другая формулировка (для, сделать, в то время, и т.д.) просто «синтаксический сахар» , чтобы лучше приручить с диким Гота в очень общих случаях повторять до тех пор , пока что - то происходит
источник
Концепция зацикливания - одна из вещей, которая отличает полноценный компьютер от простой вычислительной машины. Если система не поддерживает зацикливание, то она не завершена по Тьюрингу и, следовательно, не является компьютером.
Первым проектом, полностью завершенным по Тьюрингу, был аналитический движок Бэббиджа , поэтому он должен был иметь концепцию зацикливания. Тем не менее, существуют системы, которые имеют циклы, но не завершены по Тьюрингу (потому что они пропускают что-то еще). Работа Бэббиджа, вероятно, является хорошей отправной точкой, хотя.
источник
Предполагая, что вы имеете в виду современные текстовые языки программирования.
У Algol60 есть «ЗА», «ДО», «ДО» и «ПОЧЕМУ», так было до 1960 года.
Музей ретро-вычислений имеет несколько языков до 1960 года.
Квиккалкуль , язык 50-х для программирования шведских атомных подводных лодок имеет только GOTO. (Однако Квиккалкуль - почти наверняка обман 90-х, а не настоящий исторический язык.)
Plankalkül от Конрада Цузе - самое раннее, что я смог найти. Имеет конструкцию «фюр».
источник
DO
циклами.Работа Либница и Ньютона содержит алгоритмы с петлевыми конструкциями. Либниц создал механический калькулятор и размышлял (как это сделал Лавлейс несколько лет спустя) о машине для выполнения более сложного анализа. Его заметки об этих идеях отрывочны, но они описывают структурированную логику с помощью петель.
Тем не менее, идея последовательностей повторения и подсчета контролируемых циклов, а также того, что мы назвали бы циклами циклов , обсуждаются в работе человека, для которого названы алгоритмы: Мухаммед ибн Муса аль-Хорезми из девятого века. Его вторая книга «Аль-Китаб аль-Мухтасар фи Хисаб Аль-Джабр ва'л-Мукабала» («Компендиум по расчетам по завершению и балансировке») была известна Ньютсу, Либбесу, Либбесу, Либбезу, Либбесу ,
Конечно, аль-Хорезми полагался, в частности, на древних греков. В какой-то момент мы, вероятно, вернемся к версии Адама и Евы о полоскании, пене, повторении.
Для получения дополнительной информации об Аль-Хваризми и его работе см .:
http://www-groups.dcs.st-andrews.ac.uk/history/Mathematicians/Al-Khwarizmi.html
источник