Apa asal dan arti dari frasa “Lambda yang utama?”

43

Saya telah bermain-main dengan bahasa pemrograman fungsional selama beberapa tahun, dan saya terus menjumpai frasa ini. Sebagai contoh, ini adalah bab "The Little Schemer, yang tentunya mendahului blog dengan nama ini. (Tidak, bab ini tidak membantu menjawab pertanyaan saya.)

Saya mengerti apa arti lambda, gagasan fungsi anonim itu sederhana dan kuat, tetapi saya gagal memahami apa arti "yang tertinggi" dalam konteks ini.

Tempat-tempat yang saya lihat ungkapan ini:

  1. Judul bab 8 dari The Little Schemer
  2. Sebuah blog: http://lambda-the-ultimate.org/
  3. Serangkaian makalah "Lambda the ultimate X": http://library.readscheme.org/page1.html

Saya merasa seperti kehilangan referensi di sini, dapatkah ada yang membantu?

Eric Wilson
sumber
1
Sepertinya itu nama blog yang populer, tetapi jika ada sumber sejarah lain, saya tertarik ...
Klaim
1
Bisakah Anda memberikan beberapa referensi ke tempat-tempat yang telah Anda lihat kalimat ini? Konteks itu akan sangat membantu dalam menemukan jawaban.
Adam Crossland
@ Adam - menambahkan beberapa referensi.
Eric Wilson
Tautan seri makalah dialihkan ke cultureua.com Dapatkah seseorang memberikan tautan yang diperbarui?
tejasbubane

Jawaban:

47

Ya, itu hanya ungkapan berulang dalam judul beberapa makalah, mulai dari pasangan di tahun 70-an, di mana Sussman dan Steele menunjukkan penggunaan kalkulus lambda untuk pemrograman, dengan menggunakan dialek Lisp minimalis bernama " Skema " yang mereka rancang untuk tujuan. Anda dapat menemukan kertas-kertas itu sendiri di sini ; mereka menarik dan sangat relevan.

Saya tidak yakin apakah ini pernah dinyatakan secara eksplisit, tetapi jelas (dari konteks, setelah membaca makalah, dan mengetahui latar belakang umum dan minat penelitian para penulis) bahwa frasa ini hanyalah slogan yang menarik untuk pendapat mereka bahwa abstraksi lambda , sebagai primitif komputasi, tidak hanya universal dalam pengertian formal (mampu menyandikan program apa pun dengan cara tertentu, betapapun canggung), tetapi universal dalam arti praktis bahwa setiap dan setiap konstruksi hadir dalam bahasa lain, bahkan yang dipanggang dari bawah ke atas, dapat diimplementasikan kembali dalam bahasa berbasis lambda dengan cara yang efektif dan alami untuk digunakan.

Ungkapan yang diulang mengarah pada bentuk umum yang jelas "untuk semua X, lambda adalah ultimate X", yang merupakan arti yang secara umum saya ambil "Lambda the Ultimate" berarti sebagai nama blog, mencatat bahwa LtU berkaitan dengan bahasa pemrograman desain dan teori. Ironisnya, LtU mungkin juga akan menjadi salah satu tempat terbaik untuk menemukan seseorang yang bisa memberi tahu Anda tentang sesuatu yang lambda bukan implementasi akhir. :]

Perhatikan juga bahwa Sussman adalah salah satu penulis SICP , sebuah buku teks yang sangat berpengaruh yang juga menggunakan bahasa Skema dan menghabiskan banyak waktu memperkenalkan abstraksi lambda sebagai sebuah konsep.

CA McCann
sumber
2
+1 untuk menemukan kertas-kertas klasik itu. Guy L. Steele, Jr. juga cukup banyak menulis buku tentang Common LISP . LISP dan Skema bukanlah akhir dari jalan untuk Guy, yang kemudian berkontribusi untuk J , Benteng , dan bahasa lainnya. Guy juga terlibat dalam File Jargon dan Kamus Peretas .
John Tobler
@ John Tobler: Sangat! Saya hanya fokus pada Sussman karena ia tampaknya memiliki lebih banyak keterlibatan dengan Skema, yang sangat terkait dengan Dokumen Lambda. Tidak bermaksud memberi kesan bahwa Steele tidak melakukan hal lain, karena itu memang jauh dari benar. :]
CA McCann
28

Lambda The Ultimate mengacu pada gagasan bahwa lambda dari lambda-calculus dapat secara efektif mengimplementasikan setiap konsep bawaan dalam setiap bahasa pemrograman, dulu, sekarang, dan masa depan. Kelas, Modul, Paket, Objek, Metode, Aliran-Kontrol, Struktur Data, Makro, Lanjutan, Coroutine, Generator, Daftar Pemahaman, Streaming, dan sebagainya.

Ketika hal itu terjadi, sifat tertinggi itu termasuk berdiri untuk Fungsi Anonim. Tetapi lambda, pada intinya, tidak terbatas pada fungsi anonim saja. Mereka diajari seperti itu, tetapi esensi lambda jauh lebih dalam daripada fungsi matematika tanpa nama. Dengan kata lain, saya membahas:

Saya mengerti apa arti lambda, gagasan fungsi anonim itu sederhana dan kuat, tetapi saya gagal memahami apa arti "yang tertinggi" dalam konteks ini.

Sebagai praktisnya, penggunaan lambdas sebagai abstraksi sintaksis ('makro'), yang tidak disebut dengan nilai / aplikatif (yang fungsi matematikanya), sangat penting untuk membeli gagasan bahwa lambdas benar-benar dapat berfungsi sebagai inti dari setiap sistem pemrosesan bahasa pemrograman.

Untuk Teori: Ada hubungan yang menarik dengan paradoks Bertrand Russell dan Aksioma Pemahaman (dan Perluasan) dalam teori himpunan naif. Lambda adalah untuk fungsi apa set-builder notation adalah set: lambdas adalah notation-builder. Ada perbedaan penting, biasanya diabaikan, antara (lambda (x) (* xx)) dan apa yang dievaluasi (fungsi yang kuadrat). Jika seseorang gagal untuk membedakan antara keduanya secara umum, yaitu, antara notasi dan denotasi (kesalahan yang dilakukan Gereja dan Frege), maka ia bertabrakan dengan paradoks. Untuk set dan Frege, Barber of Seville dari Bertrand Russell yang menggambarkan kesalahan tersebut; untuk fungsi dan Gereja, itu adalah Alan Turing's Halting Oracle.

Perhatikan bahwa paradoks itu baik, praktis, dan banyak hal. Kami ingin EVAL menjadi ekspresif, dan kami ingin lambdas lebih dari sekadar fungsi. Bahwa dengan asumsi yang sebaliknya mengarah pada kontradiksi adalah hasil yang diinginkan; ini berfungsi sebagai tes kewarasan yang bagus: lambdas hampir tidak bisa menjadi yang utama jika mereka hanya mengekspresikan fungsi belaka.


Racket (sebelumnya PLT Scheme) terus mengajukan gagasan bahwa bahasa pemrograman praktis benar-benar dapat dibangun, dari bawah ke atas, pada 'just lambda'.

Kernel , menurut Shutt, berpendapat bahwa lambda sebenarnya bukan abstraksi pamungkas. Dia berpendapat masih ada satu konsep yang lebih primitif (untuk bahasa Yunani, dijuluki vau) yang dikenal Sussman sebagai FEXPR.

Felleisin dan kawan-kawan (untuk Racket) mendapatkan banyak kekuatan dari Shutt's vau dengan menggunakan konsep fase , atau metalevel, yang kira-kira berarti menjalankan kode sumber melalui beberapa tahap terjemahan (seperti dengan preprocessing C, tetapi menggunakan bahasa yang sama di setiap 'langkah', dan 'langkah' sebenarnya tidak sepenuhnya berbeda dalam waktu). (Jadi, mereka berpendapat bahwa lambda pada fase yang lebih tinggi mendekati vau dengan cukup baik.) Faktanya, mereka berpendapat bahwa fase lebih baik daripada FEXPR, justru karena lebih terbatas; singkatnya, "FEXPR terlalu kuat" (lihat karya Wand, yang Shutt membantah).

3-Lisp karya Brian Smith, "Refleksi prosedural dalam bahasa pemrograman", mencoba merumuskan kembali teori LISP yang mirip dengan bahasa dengan menggunakan notasi yang membedakan secara tajam (simbol / bahasa / program) dari denotasi (benda / rujukan / nilai / hasil) ). http://dspace.mit.edu/handle/1721.1/15961

"Theory of FEXPRs is Trivial" karya Mitchell Wand "mengirim lebih banyak paku ke peti mati (sementara?) Yang dibuat Kent Pittman untuk FEXPRs (yang, seperti Felleisen, berpendapat bahwa FEXPR membuat kompilasi terlalu sulit).

Paul Graham berpendapat dengan kekuatan dan panjang lebar dalam "On Lisp" bahwa kekuatan sebenarnya adalah lambdas sebagai transformer sintaksis (makro), bukan sebagai transformer nilai (fungsi matematika). Pengembangan Plotkin tentang kalkulus lambda aplikatif dapat dianggap agak kontras, karena Plotkin membatasi kalkulus Gereja pada bagian panggilan-oleh-nilai / aplikatifnya. Tentu saja, menangani bagian aplikatif secara efisien sangat penting, sehingga penting untuk mengembangkan teori khusus untuk penggunaan lambda. (Plotkin dan Graham tidak saling mendebat.)

Faktanya, secara umum, gagasan Lambda sebagai Ultimate hanyalah salah satu pelintiran seperti pada perdebatan abadi antara efisiensi dan ekspresif; itu adalah posisi bahwa lambda adalah alat utama untuk berekspresi, dan, jika diberikan penelitian yang cukup, pada akhirnya akan terbukti menjadi alat utama untuk efisiensi juga. Dengan kata lain, kita dapat, jika ingin, melihat masa depan bahasa pemrograman sebagai tidak lebih dan tidak kurang dari studi tentang bagaimana menerapkan secara efisien semua fragmen yang relevan secara praktis dari kalkulus lambda.

Landin "The Next 700 Programming Languages", http://www.cs.cmu.edu/~crary/819-f09/Landin66.pdf , adalah referensi yang dapat diakses yang berkontribusi pada pengembangan konsep bahwa Lambda adalah Ultimate.

William Cushing
sumber
Wow. Standing ovation-worthy answer. Banyak sekali petunjuk yang harus diikuti.
hmijail
13

Saya kira itu hanya referensi ke beberapa makalah yang ditulis oleh Sussman dan Steele antara tahun 1975 dan 1980 yang disebut:

  • Lambda: The Ultimate Imperative
  • Lambda: Deklaratif Tertinggi
  • Lambda: The Ultimate GOTO
  • LAMBDA: The Ultimate Opcode

Lihat artikel Wikipedia.

Trasplazio Garzuglio
sumber