İlk döngü yapılarının fikirlerini kim yarattı?


53
while (1) {
      if (1+1==2) {
             print "Yes, you paid attention in Preschool!";
      } else {
             print "Wait... I thought 1+1=2";
      }
 }

Bir geliştirici olarak, biz tüm döngüler kullanmak zorunda çok sık. Biz biliyoruz ki. Merak ettiğim şey, döngülere sahip olmak fikrini kim düşündü? Hangi dil döngüler başlattı? İlk döngü yapısı neydi? Bir whiledöngü miydi ? Bir fordöngü? vb?


22
Büyük olasılıkla Charles Babbage ve Ada Lovelace.
mcfinnigan

28
Şampuan talimatlarında icat edildi, durulama, köpürme, tekrarlama. :-)
Guy Sirton

13
@GuySirton, Saçmalama, bu özyineleme.
mowwwalker

18
@ user838584 - özyineleme repeatolsaydı , her biri diğerini çağırırdı - repeatasla bitiremezsiniz. Sanırım kadınlar böyle şampuan talimatlarını okudular, ama erkekler onu yineleme olarak okudular ve saçlarını yıkamak için sadece birkaç dakikaya ihtiyaçları var.
Steve314

3
Döngüleri olmayan bir bilgisayar bir hesap makinesidir.
starblue

Yanıtlar:


102

Olarak mouviciel ve Emilio Garavaglia belirtildiği kavram bilgisayar öncedir. Ancak, ilk örneği yazılım döngü döngü oldu Ada Lovelace hesaplamak için kullanılan Bernoulli sayıları açıklandığı gibi, Not G onu tercüme Charles Babbage tarafından icat Analitik Motor Sketch tarafından, LF Menabrea . Analitik Motorun döngü kabiliyeti Menabrea tarafından daha önce belirtilmiştir:

Bunun anlaşıldığını, bize yapmak istediğimiz işlemlerin başında, iğneyi (C) bölmenin (2) üzerine, bölmenin (5) üzerindeki B iğnesine ve bölmenin (9) üzerindeki iğnenin A yerleştirmesine izin verelim. C kadranının kırıcısı; iki kez çarpacak ve aynı zamanda iğne B iki bölümden geçecek. Sonuncusu, ilk farklar sütununda 5 sayısını geçen 7 sayısını gösterecektir. Şimdi B kadranının çekiçinin sırasına çarpmasına izin verirsek, iğne A'nın yedi bölmeyi ilerleteceği yedi kez çarpacaktır; önceden işaretlenen dokuz taneye eklenmiş bunlar, 9'a ardışık kare sayı olan 16 sayısını verecektir. Bu işlemlere şimdi başlayacak olursak, her zaman bölüm 2'de kalan iğne C ile başlayarak,

Analitik Motorun döngü mekanizması, Menabrea'nın anılarında belirtildiği gibi , Joseph Marie Jacquard'ın mekanik tezgâhından (1801) doğrudan miras alınmıştır :

Şimdi makinenin kendi başına nasıl yapabileceği ve insan eline başvurmadan, operasyonlara uygun ardışık düzenlemeleri nasıl üstleneceği sorulacaktır. Bu sorunun çözümü, jakarlı ekmeklerin üretiminde kullanılan Jacquard'ın cihazından, aşağıdaki şekilde alınmıştır: -

İki iplik türü genellikle dokuma malzemelerde ayırt edilir; bunlardan biri çözgü veya uzunlamasına iplik, diğeri ise mekik adı verilen alet tarafından taşınan ve uzunlamasına iplik veya çözgüden geçen, dokuma veya enine ipliktir. Bir brocaded malzeme gerekli olduğunda, sırayla belirli ipliklerin dokuma ipliği geçmesini önlemek için bu gereklidir ve bu, çoğaltılacak olan tasarımın doğası tarafından belirlenen art arda göredir. Eskiden bu süreç uzun ve zordu ve işçinin kopyalayacağı tasarıma katılarak, dişlerin alacağı hareketleri kendisi düzenlemesi gerekiyordu. Bu nedenle, özellikle kumaşa çeşitli renkteki ipliklerin girilmesi durumunda, bu madde tarifinin yüksek fiyatı ortaya çıktı. Bu üretimi basitleştirmek için, Jacquard, birlikte hareket edecek her bir iplik grubunu, yalnızca bu gruba ait olan farklı bir kolla bağlama planını tasarladı. Tüm bu kollar, genellikle dikdörtgen bir tabana sahip bir paralelopipl formunda olan, bir demet halinde bir araya getirilmiş olan çubuklarda sonlanır. Çubuklar silindiriktir ve birbirlerinden küçük aralıklarla ayrılırlar. Böylece iplikleri kaldırma işlemi, bu çeşitli kaldıraç kollarını gerekli sıraya göre hareket ettirme işlemine çözülür. Bunu gerçekleştirmek için, kol demetinin bir bölümünden biraz daha büyük boyutta dikdörtgen bir karton levha alınır. Eğer bu tabaka demetin tabanına uygulanırsa ve ilerleyen bir hareket yapıştırma kartonuna iletilirse, bu kağıt demetin tüm çubukları ile birlikte hareket eder. ve sonuç olarak, her biri ile bağlantılı olan iplikler. Fakat eğer çalışma tahtası, düz olmak yerine, onu karşılayan kolların uçlarına karşılık gelen deliklerle delinmişse, o zaman, kolların her biri, yapıştırma aletinin hareketi sırasında çalışma alanından geçeceğinden, bunların hepsi bunların içinde kalacaktır. yerler. Böylece, kartondaki deliklerin konumunun belirlenmesinin kolay olduğunu görüyoruz, böylece, herhangi bir anda, belirli bir sayıda kaldıraç ve sonuçta, geri kalanların bulunduğu yerde kaldıklarında, yükseltilmiş olan ipliklerin parselleri olacak idi. Bu sürecin, yürütülecek model tarafından belirtilen bir yasaya göre art arda tekrarlandığını varsayalım, bu modelin malzeme üzerinde çoğaltılabileceğini algıladık. Bu amaçla, sadece gerekli yasaya göre bir dizi kart oluşturmamız gerekmektedir. ve bunları birbiri ardına uygun sırayla düzenlemek; daha sonra, her mekik strokunda yeni bir yüz dönecek şekilde bağlanan çokgen bir kirişin üzerinden geçmelerine neden olarak, bu yüz kol kollarının demetine karşı paralel şekilde itilir, konu düzenli olarak yapılacaktır. Böylece, brocaded dokuların daha önce elde edilmesi zor olan hassas ve hızlı bir şekilde üretilebileceğini görüyoruz.

Jacquard'ın tezgahı, bir makineye tekrarlanan bir çıktı üretmek için sipariş verme bağlamında bir döngü için çok erken bir uygulamadır :

Jakarlı dokuma tezgâhının arkasındaki fikir, delikli kart ve kanca sistemiydi. Kartlar çok kalın yapıldı ve dikdörtgen delikler açıldı. Dokumada kullanılan kancalar ve iğneler, kartondaki bu delikler tarafından yönlendirildi. Kancalar kartla temas ettiğinde, delikli deliklerden birine rastlamadıkça sabit tutulurlar. Ardından, kanca deliğin içinden başka bir iplik geçiren bir iğne ile geçebildi ve böylece istenen deseni oluşturdu. Karmaşık desenler birbiri ardına düzenlenmiş ve / veya tekrar tekrar kullanılan birçok kartın elde edilmesiyle elde edildi.

Jacquard'ın tezgahı ayrıca depolanmış bir programın çok erken bir şekli olarak kabul edilir :

Şimdiye kadar tartışılan hesaplama makinelerinin geliştirilmesinin arkasındaki itici güç, sayısal hesaplamalardan kaynaklanmış olsaydı, 'depolanmış programın' en eski biçimine yol açan motivasyon çok farklı bir kaynaktan gelmekti: tekstil endüstrisi. Daha önce, hesaplama sistemlerinin temel yönlerinden birinin, bilgiyi temsil etme kavramı olduğunu ve bu kadar açık bir şekilde yapmamış olsak da, bu fikrin uygulanmasını bugüne kadar incelediğimiz tüm eserlerde görülebildiğini gördük: Sayısal değerler için yazılı gösterimlerin geliştirilmesinde ve bunlardan yayılan mekanik paralellikler. Böylece, bir abaküs çerçevesindeki çakılların hizalanması, kayan bir kural üzerinde hareketli ölçeklerin yan yana getirilmesi ve Schickard, Pascal ve Leibniz cihazlarında dişli dişlerin yapılandırılması, Aritmetik görevlerin altında yatan karmaşık süreçleri basitleştirmeyi amaçlayan temsili tekniklerin örnekleridir. Bununla birlikte, hesaplama işlemlerinin gerçekleştirilebileceği sayı dışında, bilgi kategorileri ve gösterimleri vardır. Joseph-Marie Jacquard tarafından 1801 yılında geliştirilen dokuma teknolojisi, bu kategoriye bir örnektir.

Charles Babbage, Jacquard'ın saklama prosedürünü Analitik Motor'a uyarladı , bir deliğin varlığı veya yokluğu, makineye basit bir açma-kapama komutu verdi:

Analytical Engine, modern dijital bilgisayarda bulunan birçok temel özelliğe sahiptir. Tekstilde karmaşık desenlerin dokunmasında kullanılan Jakarlı dokuma tezgahından ödünç alınan bir fikir olan delikli kartlar kullanılarak programlanabilir. Motor, sayıların ve ara sonuçların tutulabileceği bir 'Mağaza'ya ve aritmetik işlemenin gerçekleştirildiği ayrı bir' Değirmen 'a sahipti. Dört aritmetik fonksiyonun dahili bir repertuarına sahipti ve doğrudan çarpma ve bölme yapabilirdi. Ayrıca, modern isimlere sahip olduğumuz fonksiyonları da yapabiliyordu: koşullu dallanma, ilmekleme (yineleme), mikro programlama, paralel işleme, yineleme, kilitleme, sorgulama ve darbe şekillendirme, Babbage hiçbir yerde bu terimleri kullanmasa da. Basılı çıktılar, delikli kartlar gibi çeşitli çıktılara sahipti.

Analitik Motorunuzun koşullu dallar Jakar ilham mekanik döngüler ile birleştirilir ve depolama prosedürü biz eklemek, özellikle eğer örneğe (kavramsal) dauntingly benzer Babbage'ın yazıcıyı için, karışıma print "...";parça.

Açıkçası mekanik döngüler, Jakar'ın tezgâhını belirliyor , Antikythera mekanizması (100 BCE) bir döngü tarzında çalışan ilk bilinen cihaz ve tarihin içine daha da fazla bakarsak (ve korkunç bir şekilde konuya girmeden), güneş saatleri muhtemelen en eski insan yapımı mekanizmalar. döngülerin anlaşılmasının belirgin olduğu yerlerde, elbette güneşin ve diğer yıldız bedenlerinin yörüngelerinin yinelenen düzenini izleyerek.

Bununla birlikte, hesaplama bağlamında (ve hesaplama yapmadan veya başka bir şey olmadan), Analitik Motor ve Ada'nın Bernoulli sayıları hesaplama algoritmasının, kavramı tanıtmak için doğrudan Jakar'ın tezgahıyla en azından bir miktarını paylaşan, halkaları tanıtmak için kredilendirilebileceğini düşünüyorum o.


3
Jacquard'ın tezgâhından önce, çanların bir silindirin dönüşüyle kontrol edildiği Bruges'deki gibi arabalara mekanik döngüler bulabilirsiniz .
mouviciel

6
@mouviciel Çan canavarınızı görüyorum ve size Antikythera mekanizmasını yükseltiyorum. ; P
yannis

2
2000 y / o bilgisayar da dahil olmak üzere ansiklopedik cevabınız için +1!
mouviciel

2
bu güzel cevap beni en sevdiğim soru haline getirdi. Sadece soruyu cevaplamakla kalmıyor, aynı zamanda "bir soruyu nasıl cevaplayacağının" bir örneği olarak duruyor. İyi işti canım efendim.
Chani

Bu cevabı kabul etti, çünkü hem kesin, hem ansiklopedik ve hem de sade bir harika!
Dinamik


32

“Bir daha yapın” kavramı bir şekilde insan algısına "ilkel" dır. Bunu, doğal dili çok az bir şekilde anlayabilmiş olan bir çocuğa anlatabilirsiniz.

Kesikli sistemlerde, döngüler tüm sonlu durum makinelerinde bulunur , daha önce bulunduğunuz bir duruma ulaşabileceğinizi kabul edersiniz .

En basit döngü iki durum arasındaki döngüdür (saat). Daha fazla sayıda durumun sayımdan kaynaklanabileceği göz önüne alındığında, daha karmaşık olan her makine, belirli birleştirme işlemlerini temsil eden belirli bayraklar üzerine "atlayabilen" bir saat ile arttırılan bir "sayaç" üzerine yapılandırılmaktadır. Bu, her bir mikroişlemci tabanlı bilgisayarın dayandığı bir Von Neumann makinesinin çekirdeğidir.

Makine kodunda, bir atlama kodlanmıştır JP-Z-nnnn(burada Z, durumunuzu temel alan ypu bayrağıdır). Daha yüksek seviyede bir dilde bu neredeyse anında

if(z) goto x;

Bir döngü, gotox etiketinin goto komutunun kendisinden önce geldiğinden daha fazla bir şey değildir .

Diğer tüm formülasyonlar (için, vb. İçin), bir şey meydana gelinceye kadar , sık rastlanan tekrarlama durumlarında yabanıl gotoyu daha iyi evcilleştirmek için sadece "sözdizimsel şeker" dir.


4

Döngü kavramı, tam gelişmiş bir bilgisayarı basit bir hesaplama makinesinden ayıran şeylerden biridir. Bir sistem döngü oluşturmayı desteklemiyorsa, işlem tamamlanmaz ve bu nedenle bir bilgisayar değildir.

İlk Turing-komple tasarımı Babbage's Analytical Engine'di , bu nedenle döngü kavramı olmalı. Ancak, döngü olan ancak Turing tamamlanmayan sistemler var (çünkü başka bir şeyi atlarlar). Babbage'ın çalışması muhtemelen iyi bir başlangıç ​​noktasıdır.


6
Lambda matematiğinin halkaları yoktur (ve koşul ya da sıçramalar yoktur), ancak turing tamamlanmıştır. Özyineleme, yineleme kadar güçlüdür.

3
özyinelemeli bir işleve herhangi bir döngüyü yeniden yazabilir ve döngüleri elimine edebilirsiniz
cırcır ucube

5
Döngülerin wikipedia makalesi, özyinelemeyi tamamen ilgisiz bir kavramdan ziyade bir döngüyü ifade etmenin bir yolu olarak tanımlar. en.wikipedia.org/wiki/Program_loop#Loops CPU'lar döngüler olmamasından gelince, onlar (keyfi bir bellek adresine atlama) onları uygulamak için gerekli araçlara sahip do
GordonM

8
Kesin olarak, özyinelemeleri döngüleri ifade etmek için kullanılabilir . Bu ise birbirlerine izomorf olmasına rağmen, bir çok farklı bir kavram. Bir kahve bardağı, topologların iddia ettiği gibi kafasını karıştırdığı için çörek değil.

4
Doğru, ancak herhangi bir turing-komple sistemin aynı sırayı birden çok kez gerçekleştirme kavramını ifade etme yoluna sahip olması gerekir, mekanizma özyineleme olabilir veya talimat listesinde geriye doğru atlama veya aynı etkiye ulaşan herhangi bir şey olabilir. Bir sistem bir dizi talimatı tekrarlamak için herhangi bir yol sağlamazsa (listedeki talimatları fiziksel olarak tekrarlamak dışında), Turing işlemi tamamlanamaz. Analitik Motor Tamamlandı, bu yüzden bir şekilde ya da başka şekilde döngü uygulamak zorundadır.
GordonM

3

Varsayım, modern metin bilgisayar programlama dilleri demek.

Algol60 , "FOR", "DO", "UNTIL" ve "WHILE" 'a sahiptir, bu yüzden 1960'tan önceydi.

Retro Bilgisayar Müzesi birkaç dil 1960 öncesi vardır.

Kvikkalkul , '50'li yıllardan itibaren İsveç nükleer sübvansiyonlarını programlama dili' GOTO’ya sahip. (Ancak, Kvikkalkul neredeyse kesinlikle 90'lı yıllardan kalma bir aldatmacadır, gerçek bir tarihsel dil değil.)

Konrad Zuse'den Plankalkül bulabildiğim en eski kişi. Bir "für" yapısı var.


Plankalkül, son zamanlara kadar esasen yayınlanmamıştı ve Kvikkalkul'un uzun zamandan beri aldatmaca olduğu söyleniyor. Bu ışıkta, kredi muhtemelen John Backus ve 1957'de sahada çalışan bir derleyiciye sahip olan FORTRAN ekibine DOdöngülerle gitmek zorunda .
Ross Patterson,

2

Hem Liebniz hem de Newton'un çalışması, döngü yapılı algoritmalar içeriyor. Liebniz mekanik bir hesap makinesi yaptı ve daha karmaşık analizler yapmak için bir makine hakkında (Lovelace'in yıllar sonra yaptığı gibi) spekülasyon yaptı. Bu fikirler hakkındaki notları kabataslak, ancak döngüler ile yapılandırılmış mantığı anlatıyorlar.

Ancak tekrarlama dizileri ve sayım kontrollü döngüler fikri, hem de biz diyeceğimiz olarak döngüler ise algoritmalar isimlendirilirler insanın çalışmalarında ele alınmıştır: Hârizmî dokuzuncu yüzyıldan. İkinci kitabı El-Kitab El-Muhtasar fi Hisab El-Cebabî Waql-Muqabala (الكتاب المختصر في حساب الجبر والمقابلة) (Tamamlanma ve Dengeleme ile Hesaplama Üzerine Bir Compendium, Newton, Babeba, Liebblo, Sevgis, Babb, Love, Beebnil, bilir. .

Elbette el-Hwarizmi, kısmen eski Yunanlılara güveniyordu. Bir noktada muhtemelen Adem ve Havva'nın durulama, köpürme, tekrarlama sürümüne geri dönüyoruz.

El Hwārizmī ve eserleri hakkında daha fazla bilgi için bakınız:

http://www-groups.dcs.st-andrews.ac.uk/history/Mathematicians/Al-Khwarizmi.html

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.