Siapa yang menciptakan gagasan konstruksi lingkaran pertama?

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

Sebagai pengembang, kami semua harus menggunakan loop sangat sering. Kami tahu itu. Apa yang saya pikirkan adalah, siapa yang memikirkan ide untuk memiliki loop? Bahasa apa yang digunakan loop? Apa konstruksi lingkaran pertama? Apakah ini sebuah whileloop? Satu forlingkaran? dll?

Dinamis
sumber
22
Charles Babbage dan Ada Lovelace, kemungkinan besar.
mcfinnigan
28
Itu ditemukan dalam instruksi sampo, bilas, busa, ulangi. :-)
Guy Sirton
13
@GuySirton, Jangan konyol, itu rekursi.
mowwwalker
18
@ user838584 - jika itu adalah rekursi, masing repeat- masing akan memanggil yang lain repeat- Anda tidak akan pernah selesai. Saya pikir mungkin wanita membaca instruksi shampo seperti itu, tetapi pria membacanya sebagai iterasi, dan hanya perlu beberapa menit untuk mencuci rambut mereka.
Steve314
3
Komputer tanpa loop adalah kalkulator.
starblue

Jawaban:

102

Seperti yang dicatat oleh mouviciel dan Emilio Garavaglia , konsep tersebut mendahului komputasi. Namun, contoh pertama dari loop perangkat lunak adalah loop Ada Lovelace yang digunakan untuk menghitung angka Bernoulli , seperti yang dijelaskan dalam Catatan G dari terjemahan Sketsa Mesin Analitik yang Diciptakan oleh Charles Babbage , oleh LF Menabrea . Kemampuan Analytical Engine untuk mengulang dicatat sejak awal oleh Menabrea:

Ini dipahami, mari kita, pada awal rangkaian operasi yang ingin kita jalankan, letakkan jarum C di divisi 2, jarum B di divisi 5, dan jarum A di divisi 9. Mari kita biarkan palu dari dial C untuk menyerang; itu akan menyerang dua kali, dan pada saat yang sama jarum B akan melewati dua divisi. Yang terakhir kemudian akan menunjukkan angka 7, yang berhasil angka 5 di kolom perbedaan pertama. Jika kita sekarang mengizinkan palu dari pelat B untuk menyerang pada gilirannya, itu akan memukul tujuh kali, di mana jarum A akan maju tujuh divisi; ini ditambahkan ke sembilan yang sudah ditandai dengan itu akan memberikan angka 16, yang merupakan angka kuadrat berturut-turut menjadi 9. Jika kita sekarang memulai kembali operasi ini, dimulai dengan jarum C, yang selalu ditinggalkan di divisi 2,

Mekanisme perulangan Mesin Analitis ini secara langsung diwarisi dari alat tenun mekanis Joseph Marie Jacquard (1801), sebagaimana dicatat dalam memoar oleh Menabrea:

Sekarang akan ditanyakan bagaimana mesin itu dapat dengan sendirinya, dan tanpa bantuan orang lain, mengasumsikan disposisi berturut-turut sesuai dengan operasi. Solusi dari masalah ini telah diambil dari peralatan Jacquard, yang digunakan untuk pembuatan barang-barang brokat, dengan cara berikut: -

Dua spesies benang biasanya dibedakan dalam bahan tenun; satu adalah benang lungsin atau longitudinal, yang lainnya benang pakan atau melintang, yang disampaikan oleh instrumen yang disebut pesawat ulang-alik, dan yang melintasi benang longitudinal atau lungsin. Ketika barang-barang brokat diperlukan, pada gilirannya perlu untuk mencegah benang-benang tertentu melintasi benang, dan ini sesuai dengan suksesi yang ditentukan oleh sifat desain yang akan direproduksi. Sebelumnya proses ini panjang dan sulit, dan itu adalah syarat bahwa pekerja, dengan memperhatikan desain yang akan dia salin, seandainya dia sendiri yang mengatur gerakan yang harus diambil oleh benang. Dari situlah muncul harga tinggi dari deskripsi barang-barang ini, terutama jika benang-benang berbagai warna dimasukkan ke dalam kain. Untuk menyederhanakan pembuatan ini, Jacquard menyusun rencana untuk menghubungkan setiap kelompok utas yang akan bertindak bersama, dengan tuas berbeda yang dimiliki secara eksklusif pada kelompok itu. Semua tuas ini berakhir dalam batang, yang disatukan bersama dalam satu bundel, biasanya memiliki bentuk paralelopip dengan basis persegi panjang. Batangnya berbentuk silinder, dan dipisahkan satu sama lain dengan interval kecil. Proses mengangkat benang dengan demikian diselesaikan ke dalam memindahkan berbagai tuas-senjata ini dalam urutan yang disyaratkan. Untuk menghasilkan efek ini, lembar pasteboard persegi panjang diambil, ukurannya agak lebih besar dari pada bagian bundel tuas-lengan. Jika lembar ini diterapkan ke dasar bundel, dan gerakan maju kemudian dikomunikasikan ke papan tulis, yang terakhir ini akan bergerak dengan itu semua batang bundel, dan akibatnya utas yang terhubung dengan masing-masing. Tetapi jika papan tulis, bukannya polos, ditusuk dengan lubang yang sesuai dengan ujung tuas yang bertemu, maka, karena masing-masing tuas akan melewati papan tulis selama gerakan yang terakhir, mereka semua akan tetap di mereka tempat Dengan demikian kita melihat bahwa mudah untuk menentukan posisi lubang-lubang di papan tulis, bahwa, pada suatu waktu tertentu, akan ada sejumlah pengungkit, dan akibatnya dari petak-petak benang, diangkat, sedangkan sisanya tetap berada di tempat mereka. adalah. Andaikata proses ini diulangi berturut-turut sesuai dengan hukum yang ditunjukkan oleh pola yang akan dieksekusi, kami melihat bahwa pola ini dapat direproduksi pada barang-barang tersebut. Untuk tujuan ini, kita hanya perlu membuat serangkaian kartu sesuai dengan hukum yang disyaratkan, dan mengaturnya dalam urutan yang sesuai satu demi satu; kemudian, dengan menyebabkan mereka melewati balok poligon yang begitu terhubung sehingga mengubah wajah baru untuk setiap langkah pesawat ulang-alik, yang wajah kemudian harus didorong sejajar dengan dirinya sendiri terhadap bundel lengan tuas, operasi mengangkat utas akan dilakukan secara teratur. Jadi kita melihat bahwa jaringan brokat dapat dibuat dengan presisi dan kecepatan yang sebelumnya sulit diperoleh.

Alat tenun Jacquard adalah aplikasi awal dari loop dalam konteks memesan mesin untuk menghasilkan output berulang :

Gagasan di balik alat tenun Jacquard adalah sistem kartu punch dan kait. Kartu-kartu itu dibuat sangat tebal dan berlubang-lubang persegi. Kait dan jarum yang digunakan dalam menenun dipandu oleh lubang-lubang ini di karton. Ketika kait bersentuhan dengan kartu, mereka ditahan diam kecuali jika menemukan salah satu lubang berlubang. Kemudian kait itu mampu melewati lubang dengan jarum memasukkan benang lain, sehingga membentuk pola yang diinginkan. Pola rumit dicapai dengan mengatur banyak kartu satu demi satu dan / atau digunakan berulang kali.

Alat tenun Jacquard juga diakui sebagai bentuk paling awal dari program tersimpan :

Jika dorongan di balik banyak pengembangan mesin hitung yang dibahas sejauh ini telah muncul dari perhitungan numerik, motivasi yang mengarah pada bentuk paling awal dari `program tersimpan 'berasal dari sumber yang sangat berbeda: industri tekstil. Kita telah melihat sebelumnya bahwa salah satu aspek mendasar dari sistem komputasi adalah konsep mewakili informasi dan, meskipun kami belum melakukannya secara eksplisit, penerapan ide ini dapat dilihat di semua artefak yang telah kami periksa sampai sekarang: dalam pengembangan representasi tertulis untuk nilai numerik dan persamaan mekanik yang muncul dari ini. Dengan demikian, penjajaran kerikil pada bingkai sempoa, penjajaran skala bergerak pada slide-rule, dan konfigurasi gigi bergerigi pada perangkat Schickard, Pascal dan Leibniz, adalah semua contoh teknik representasional yang berusaha menyederhanakan proses kompleks yang mendasari tugas aritmatika. Namun, ada kategori informasi, dan representasi daripadanya, selain dari jumlah di mana proses komputasi dapat dilakukan. Teknologi tenun yang dikembangkan oleh Joseph-Marie Jacquard pada tahun 1801 menggambarkan salah satu contoh kategori tersebut.

Charles Babbage juga mengadaptasi prosedur penyimpanan Jacquard ke dalam Analytical Engine , ada atau tidaknya lubang mengkomunikasikan perintah on-off sederhana ke mesin:

The Analytical Engine memiliki banyak fitur penting yang ditemukan di komputer digital modern. Itu dapat diprogram menggunakan kartu berlubang, sebuah ide yang dipinjam dari alat tenun Jacquard yang digunakan untuk menenun pola kompleks dalam tekstil. Mesin memiliki 'Toko' di mana angka dan hasil antara dapat disimpan, dan 'Penggilingan' terpisah di mana pemrosesan aritmatika dilakukan. Itu memiliki repertoar internal dari empat fungsi aritmatika dan dapat melakukan perkalian dan pembagian langsung. Itu juga mampu fungsi yang kami memiliki nama-nama modern: percabangan bersyarat, pengulangan (iterasi), pemrograman mikro, pemrosesan paralel, pengulangan, penguncian, pemungutan suara, dan pembentukan pulsa, antara lain, meskipun Babbage tidak menggunakan istilah-istilah ini. Itu memiliki berbagai output termasuk cetakan hardcopy, kartu berlubang,

Cabang bersyarat dari Analytical Engine yang dikombinasikan dengan loop mekanik yang diilhami Jacquard dan prosedur penyimpanannya sangat mirip (secara konseptual) dengan contoh Anda, terutama jika kita menambahkan printer Babbage ke dalam campuran, untuk print "...";bagian - bagiannya.

Jelas loop mekanis ada sebelum alat tenun Jacquard, perangkat pertama yang diketahui bekerja secara melingkar adalah mekanisme Antikythera (100 SM), dan jika kita melihat lebih jauh ke dalam sejarah (dan menjelajah jauh dari topik), jam matahari mungkin merupakan mekanisme tertua buatan manusia di mana pemahaman tentang loop terbukti, mengikuti tentu saja pola berulang dari orbit matahari dan benda-benda bintang lainnya.

Namun saya berpikir bahwa dalam konteks komputasi (dan tidak menghitung atau apa pun), Analytical Engine dan algoritma perhitungan angka Bernoulli dapat dikreditkan untuk memperkenalkan loop, berbagi setidaknya beberapa kredit dengan alat tenun Jacquard, setelah secara langsung mengadaptasi konsep dari saya t.

yannis
sumber
3
Sebelum alat tenun Jacquard, Anda dapat menemukan lilitan mekanis dalam carillons, seperti loncatan di Bruges, tempat lonceng dikontrol oleh rotasi silinder .
mouviciel
6
@ Mouviciel Saya melihat monstrositas bel Anda dan saya membesarkan Anda mekanisme Antikythera. ; P
yannis
2
+1 untuk jawaban ensiklopedis Anda, termasuk komputer 2000 tahun!
mouviciel
2
jawaban yang indah ini membuat saya menjadi pertanyaan favorit. Itu tidak hanya menjawab pertanyaan, tetapi berdiri sebagai contoh "bagaimana menjawab pertanyaan". Kerja bagus, tuan.
Chani
Menerima jawaban ini karena konklusif, ensiklopedis, dan sangat mengagumkan!
Dinamis
50

Loop mendahului komputasi. Anda dapat menemukannya dalam notasi musik sedini nyanyian Gregorian:

tanda ulangi

mouviciel
sumber
2
Ini bisa menjadi jawaban yang bagus jika sedikit lebih detail ditambahkan ke dalamnya. Tetap saja, pekerjaan bagus.
Dinamis
Tolong beri lebih banyak referensi (tanggal paling awal, notasi musik paling awal untuk fitur loop / repeat constructs)
Skippy Fastol
@SkippyFastol Ada di artikel itu: en.wikipedia.org/wiki/Repeat_sign#Other_notation
cwallenpoole
32

Konsep "lakukan lagi" entah bagaimana "primitif" bagi persepsi manusia. Anda dapat menceritakan hal ini kepada seorang anak yang baru saja menguraikan pemahaman minimal tentang bahasa alami.

Dalam sistem diskrit, loop ditemukan di semua mesin hingga saat Anda mengakui bahwa Anda dapat mencapai kondisi yang sebelumnya Anda alami .

Loop paling sederhana adalah siklus antara dua kondisi (jam). Mengingat bahwa jumlah negara yang lebih tinggi dapat dihasilkan dari penghitungan darinya, setiap mesin yang lebih kompleks dikonstruksi pada "penghitung" yang ditambahkan oleh jam yang dapat membuat "lompatan" pada bendera tertentu yang mewakili operasi kombinasi tertentu. Ini adalah inti dari mesin Von Neumann yang menjadi dasar setiap komputer berbasis mikroprosesor.

Dalam kode mesin, lompatan dikodekan JP-Z-nnnn(di mana Z adalah flag whatefer ypu berdasarkan kondisi Anda). Dalam bahasa tingkat yang lebih tinggi, terjemahan ini segera diterjemahkan menjadi

if(z) goto x;

Sebuah loop tidak lebih dari sebuah gototempat di mana label x mendahului instruksi goto itu sendiri.

Setiap formulasi lainnya (untuk, melakukan, sementara, dll) hanya "sintaksis gula" untuk lebih menjinakkan yang liar goto dalam kasus yang sangat umum mengulangi sampai sesuatu terjadi

Emilio Garavaglia
sumber
4

Konsep looping adalah salah satu hal yang membedakan komputer full-blown dari mesin hitung sederhana. Jika suatu sistem tidak mendukung perulangan maka itu bukan turing-lengkap dan karenanya bukan komputer.

Desain lengkap Turing pertama adalah Mesin Analitik Babbage , jadi pasti memiliki konsep perulangan. Namun, ada sistem yang memiliki perulangan tetapi tidak Turing lengkap (karena mereka menghilangkan sesuatu yang lain). Pekerjaan Babbage mungkin merupakan titik awal yang baik.

GordonM
sumber
6
Kalkulus lambda tidak memiliki loop (dan tidak ada kondisi atau lompatan), namun itu turing-selesai. Rekursi sama kuatnya dengan iterasi.
3
Anda dapat menulis ulang setiap loop ke fungsi rekursif dan menghilangkan loop
ratchet freak
5
Artikel wikipedia pada loop menggambarkan rekursi sebagai cara mengekspresikan loop, daripada konsep yang sama sekali tidak terkait. en.wikipedia.org/wiki/Program_loop#Loops Sedangkan untuk CPU yang tidak memiliki loop, mereka memiliki alat yang diperlukan untuk mengimplementasikannya (melompat ke alamat memori
arbiter
8
Justru, rekursi dapat digunakan untuk mengekspresikan loop. Ini adalah konsep yang sangat berbeda, meskipun mereka isomorfik satu sama lain. Sebuah cangkir kopi bukanlah donat hanya karena para ahli topologi diduga membingungkan mereka.
4
Benar, tetapi sistem turing-complete harus memiliki cara untuk mengekspresikan konsep melakukan urutan yang sama beberapa kali, mekanismenya dapat rekursi, atau melompat mundur dalam daftar instruksi atau hal lain yang mencapai efek yang sama. Jika suatu sistem tidak menyediakan cara mengulangi seperangkat instruksi (selain secara fisik mengulangi instruksi dalam daftar) maka itu tidak dapat diselesaikan secara lengkap. Engine Analitik sudah selesai, sehingga harus menerapkan perulangan dalam satu atau lain bentuk.
GordonM
3

Dengan asumsi Anda maksud bahasa pemrograman komputer teks modern.

Algol60 memiliki "FOR", "DO", "SAMPAI" dan "WHILE", jadi itu sebelum tahun 1960.

The Retro Computing Museum memiliki beberapa bahasa pra 1960.

Kvikkalkul , bahasa dari tahun 50-an untuk pemrograman kapal selam nuklir Swedia hanya memiliki GOTO. (Namun, Kvikkalkul hampir pasti merupakan tipuan dari tahun 90-an, bukan bahasa sejarah yang nyata.)

Plankalkül oleh Konrad Zuse adalah yang paling awal yang bisa saya temukan. Ini memiliki konstruksi "für".

Chad Brewbaker
sumber
Plankalkül pada dasarnya tidak dipublikasikan hingga saat ini, dan Kvikkalkul telah lama dikabarkan sebagai tipuan. Dalam hal itu, kredit mungkin harus diberikan kepada John Backus dan tim FORTRAN , yang memiliki kompiler berjalan di lapangan pada tahun 1957, dengan DOloop.
Ross Patterson
2

Karya Liebniz dan Newton berisi algoritma dengan konstruksi loop. Liebniz membangun kalkulator mekanik dan berspekulasi (seperti yang dilakukan Lovelace bertahun-tahun kemudian) tentang mesin untuk melakukan analisis yang lebih canggih. Catatannya tentang ide-ide ini samar, tetapi mereka menggambarkan logika terstruktur dengan loop.

Namun, gagasan tentang urutan pengulangan dan penghitungan loop yang terkontrol, serta apa yang kita sebut sementara loop dibahas dalam karya lelaki yang diberi nama algoritme: Muhammad ibn Musa al-Khwarizmi dari abad kesembilan. Buku keduanya, al-Kitab al-mukhtasar fi hisab al-jabr wa'l-muqabala (الكتاب المختصر في حساب الجبر والمقابلة) (Sebuah Kompendium tentang Perhitungan dengan Penyelesaian dan Penyeimbangan) diketahui oleh Newton, Liebniz, Babbage, dll. .

Tentu saja al-Khwarizmi mengandalkan, sebagian, pada orang Yunani kuno. Pada titik tertentu kita mungkin kembali ke versi bilas, busa, ulangi versi Adam dan Hawa.

Untuk informasi lebih lanjut tentang Al-Khwārizmī dan karyanya, lihat:

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

Chuck Herbert
sumber