while (1) {
if (1+1==2) {
print "Yes, you paid attention in Preschool!";
} else {
print "Wait... I thought 1+1=2";
}
}
Jako programista wszyscy musimy bardzo często używać pętli . Wiemy to. Zastanawiałem się, kto pomyślał o tym, żeby mieć pętle? W jakim języku wprowadzono pętle? Jaka była pierwsza konstrukcja pętli? Czy to była while
pętla? for
Pętla? itp?
repeat
przywołałby innąrepeat
- nigdy byś nie skończył. Myślę, że kobiety mogą w ten sposób czytać instrukcje dotyczące szamponu, ale mężczyźni czytają je jako iterację i potrzebują tylko kilku minut na umycie włosów.Odpowiedzi:
Jak zauważyli mouviciel i Emilio Garavaglia , koncepcja ta poprzedza przetwarzanie komputerowe. Jednak pierwszym wystąpieniem pętli programowej była pętla, którą Ada Lovelace wykorzystała do obliczenia liczb Bernoulliego , jak opisano w uwadze G jej tłumaczenia szkicu silnika analitycznego wynalezionego przez Charlesa Babbage'a przez LF Menabreę . Menabrea zauważyła, że silnik analityczny zapętla się wcześnie:
Mechanizm zapętlenia silnika analitycznego jest bezpośrednio odziedziczony z mechanicznego krosna Josepha Marie Jacquarda (1801), jak zauważono w pamiętniku Menabrei:
Krosno żakardowe to bardzo wczesne zastosowanie pętli w kontekście zamawiania maszyny w celu uzyskania powtarzalnego wyniku :
Krosno żakardowe jest również rozpoznawane jako bardzo wczesna forma przechowywanego programu :
Charles Babbage dostosował również procedurę przechowywania Jacquarda do silnika analitycznego , obecność lub brak dziury przekazał maszynie proste polecenie włączenia / wyłączenia:
Warunkowe gałęzie silnika analitycznego w połączeniu z inspirowanymi żakardem pętlami mechanicznymi i procedurą przechowywania są zniechęcająco podobne (koncepcyjnie) do twojego przykładu, szczególnie jeśli dodamy drukarkę Babbage'a do
print "...";
części.Oczywiście mechaniczne pętle wyprzedzają krosno Jacquarda, pierwszym znanym urządzeniem działającym w pętli jest mechanizm Antikythera (100 p.n.e.), a jeśli spojrzymy jeszcze głębiej w historię (i odważnie zaryzykujemy), zegary słoneczne są prawdopodobnie najstarszymi mechanizmami stworzonymi przez człowieka gdzie zrozumienie pętli jest oczywiste, podążając oczywiście za powtarzającym się wzorem orbit Słońca i innych ciał gwiezdnych.
Myślę jednak, że w kontekście obliczeń (i nie obliczania ani niczego innego) silnik analityczny i algorytm obliczania liczb Auli Bernoulli można przypisać do wprowadzenia pętli, dzieląc przynajmniej część uznania z krosnem Jacquarda, bezpośrednio dostosowując koncepcję z to.
źródło
Pętle przed obliczeniami. Można je znaleźć w notacji muzycznej już od chorału gregoriańskiego:
źródło
Pojęcie „zrób to ponownie” jest w pewnym sensie „prymitywne” dla ludzkiej percepcji. Możesz to powiedzieć dziecku, które właśnie opracowało minimalne rozumienie języka naturalnego.
W systemach dyskretnych pętle znajdują się we wszystkich skończonych maszynach stanowych, gdy przyznajesz, że możesz osiągnąć stan, w którym byłeś wcześniej .
Najprostsza pętla to cykl między dwoma stanami (zegar). Biorąc pod uwagę, że z tej liczby może wynikać większa liczba stanów, każda bardziej złożona maszyna jest konstruowana na „liczniku” zwiększanym przez zegar, który może „przeskoczyć” na niektóre flagi reprezentujące pewne operacje kombinacyjne. Jest to rdzeń maszyny Von Neumann, na której opiera się każdy komputer oparty na mikroprocesorze.
W kodzie maszynowym kodowany jest skok
JP-Z-nnnn
(gdzie Z jest flagą whpfer, na której opierasz swój warunek). W języku wyższego poziomu przekłada się to niemal natychmiastPętla jest niczym więcej niż miejscem, w
goto
którym etykieta x poprzedza samą instrukcję goto.Każdy inny preparat (do, do, while, itd.) Jest po prostu „cukier syntaktyczny”, aby lepiej oswoić się z dziką goto w bardzo typowych przypadków powtarzania aż coś się dzieje
źródło
Koncepcja zapętlenia jest jedną z rzeczy, które odróżniają pełnowymiarowy komputer od prostej maszyny obliczeniowej. Jeśli system nie obsługuje zapętlania, oznacza to, że nie jest on kompletny, a zatem nie jest komputerem.
Pierwszym kompletnym projektem Turinga był silnik analityczny Babbage'a , więc musiał mieć koncepcję zapętlenia. Istnieją jednak systemy, które mają pętlę, ale Turing nie jest kompletny (ponieważ pomijają coś innego). Praca Babbage'a jest jednak prawdopodobnie dobrym punktem wyjścia.
źródło
Zakładając, że masz na myśli współczesne tekstowe języki programowania komputerów.
Algol60 ma „FOR”, „DO”, „UNTIL” i „WHILE”, tak było przed 1960 rokiem.
Retro Computing Muzeum posiada kilka języków sprzed 1960.
Kvikkalkul , język z lat 50. do programowania szwedzkich okrętów nuklearnych ma tylko GOTO. (Jednak Kvikkalkul jest prawie na pewno mistyfikacją z lat 90., a nie prawdziwym językiem historycznym.)
Plankalkül Konrada Zuse jest najwcześniejszy, jaki udało mi się znaleźć. Ma konstrukcję „für”.
źródło
DO
pętlami.Praca zarówno Liebniza, jak i Newtona zawiera algorytmy z konstruktami pętli. Liebniz zbudował kalkulator mechaniczny i spekulował (podobnie jak Lovelace lata później) o maszynie do wykonywania bardziej zaawansowanych analiz. Jego notatki na temat tych pomysłów są szkicowe, ale opisują uporządkowaną logikę za pomocą pętli.
Jednak idea powtarzania sekwencji i liczenia kontrolowanych pętli, a także to, co nazywamy pętlami, omawia się w pracy człowieka, dla którego algorytmy są nazwane: Muhammad ibn Musa al-Khwarizmi z IX wieku. Jego druga książka, al-Kitab al-mukhtasar fi hisab al-jabr wa'l-muqabala (الكتاب المختصر في حساب الجبر والمقابلة) (Kompendium na temat obliczania poprzez ukończenie i wyważenie) była znana Newtonowi, Liebnizowi, Babbage, Lovelace .
Oczywiście al-Khwarizmi polegał częściowo na starożytnych Grekach. W pewnym momencie prawdopodobnie wracamy do wersji płukania, piany, powtórzenia Adama i Ewy.
Więcej informacji na temat Al-Khwārizmī i jego pracy można znaleźć:
http://www-groups.dcs.st-andrews.ac.uk/history/Mathematicians/Al-Khwarizmi.html
źródło