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 while
loop? Satu for
lingkaran? dll?
repeat
- masing akan memanggil yang lainrepeat
- 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.Jawaban:
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:
Mekanisme perulangan Mesin Analitis ini secara langsung diwarisi dari alat tenun mekanis Joseph Marie Jacquard (1801), sebagaimana dicatat dalam memoar oleh Menabrea:
Alat tenun Jacquard adalah aplikasi awal dari loop dalam konteks memesan mesin untuk menghasilkan output berulang :
Alat tenun Jacquard juga diakui sebagai bentuk paling awal dari program tersimpan :
Charles Babbage juga mengadaptasi prosedur penyimpanan Jacquard ke dalam Analytical Engine , ada atau tidaknya lubang mengkomunikasikan perintah on-off sederhana ke mesin:
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.
sumber
Loop mendahului komputasi. Anda dapat menemukannya dalam notasi musik sedini nyanyian Gregorian:
sumber
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 menjadiSebuah loop tidak lebih dari sebuah
goto
tempat 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
sumber
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.
sumber
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".
sumber
DO
loop.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
sumber