Saya benar-benar merasa bahwa saya harus belajar Lisp dan ada banyak sumber daya yang baik di luar sana untuk membantu saya melakukannya.
Saya tidak menunda sintaksis yang rumit, tetapi di mana dalam "pemrograman komersial tradisional" saya akan menemukan tempat-tempat yang masuk akal untuk menggunakannya daripada bahasa prosedural.
Apakah ada aplikasi pembunuh komersial di luar sana yang telah ditulis dalam Lisp?
functional-programming
lisp
David
sumber
sumber
Jawaban:
Salah satu kegunaan utama untuk Lisp adalah dalam Kecerdasan Buatan. Seorang teman saya di kampus mengambil kursus AI lulusan dan untuk proyek utamanya ia menulis sebuah pemecah " Lights Out " di Lisp. Beberapa versi dari programnya menggunakan rutinitas AI yang sedikit berbeda dan pengujian pada 40 atau lebih komputer menghasilkan beberapa hasil yang cukup rapi (saya berharap itu online di suatu tempat bagi saya untuk ditautkan, tapi saya rasa tidak).
Dua semester lalu saya menggunakan Skema (sebuah bahasa berdasarkan Lisp) untuk menulis program interaktif yang disimulasikan rutinitas "Who's on First" karya Abbott dan Costello. Input dari pengguna dicocokkan dengan beberapa struktur data yang cukup rumit (menyerupai peta dalam bahasa lain, tetapi jauh lebih fleksibel) untuk memilih seperti apa respons yang sesuai. Saya juga menulis rutin untuk menyelesaikan slide puzzle 3x3 (sebuah algoritma yang dapat dengan mudah diperluas ke puzzle slide yang lebih besar).
Singkatnya, belajar Lisp (atau Skema) mungkin tidak menghasilkan banyak aplikasi praktis di luar AI tetapi ini adalah pengalaman belajar yang sangat berharga, seperti yang telah dinyatakan oleh banyak orang lain. Pemrograman dalam bahasa fungsional seperti Lisp juga akan membantu Anda berpikir secara rekursif (jika Anda memiliki masalah dengan rekursi dalam bahasa lain, ini bisa sangat membantu).
sumber
Lisp adalah bahasa yang besar dan kompleks dengan runtime yang besar dan kompleks untuk mendukungnya. Untuk alasan itu, Lisp paling cocok untuk masalah besar dan rumit.
Sekarang, masalah yang rumit tidak sama dengan masalah yang rumit . Masalah yang kompleks adalah masalah dengan banyak detail kecil, tetapi itu tidak sulit. Menulis sistem pemesanan maskapai adalah bisnis yang kompleks, tetapi dengan cukup uang dan programmer tidak sulit. Dapatkan perbedaannya?
Masalah yang rumit adalah masalah yang berbelit-belit, masalah di mana pemisahan dan penaklukan tradisional tidak berhasil. Mengontrol robot, atau bekerja dengan data yang tidak tabular (bahasa, misalnya), atau situasi yang sangat dinamis.
Lisp sangat cocok untuk masalah di mana solusinya harus diperluas; contoh klasiknya adalah editor teks emacs. Ini sepenuhnya dapat diprogram, dan dengan demikian lingkungan pemrograman dengan haknya sendiri.
Dalam bukunya yang terkenal PAIP , Norvig mengatakan bahwa Lisp sangat ideal untuk pemrograman eksplorasi. Yaitu, pemrograman solusi untuk masalah yang tidak sepenuhnya dipahami (sebagai lawan dari sistem pemesanan online). Dengan kata lain: Masalah rumit.
Selanjutnya, mempelajari Lisp akan mengingatkan Anda tentang sesuatu yang mendasar yang telah dilupakan: Perbedaan antara Von Neumann dan Turing. Seperti kita ketahui, model komputasi Turing adalah model teoretis yang menarik, tetapi tidak berguna sebagai model untuk mendesain komputer. Von Neumann, di sisi lain, merancang model bagaimana komputer dan komputasi dijalankan: Model Von Neumann. Inti dari model Von Neumann adalah Anda hanya memiliki satu memori, dan menyimpan kode dan data Anda di sana. Perhatikan baik-baik bahwa program Java (atau C #, atau apa pun yang Anda suka) adalah manifestasi dari model Turing. Anda mengatur program Anda dalam beton, sekali dan untuk semua. Maka Anda berharap dapat menangani semua data yang dilemparkan ke sana.
Lisp mempertahankan model Von Neuman; tidak ada batas yang tajam dan ditentukan sebelumnya antara kode dan data. Pemrograman dalam Lisp membuka pikiran Anda akan kekuatan model Von Neumann. Pemrograman dalam Lisp membuat Anda melihat konsep lama dengan cara baru.
Akhirnya, karena bersifat interaktif, Anda akan belajar berinteraksi dengan program saat mengembangkannya (bukan kompilasi dan jalankan). Ini juga mengubah cara Anda memprogram, dan cara Anda melihat pemrograman.
Dengan intro ini saya akhirnya dapat menawarkan balasan untuk pertanyaan Anda: Apakah Anda akan menemukan tempat-tempat yang mengalahkan bahasa "tradisional"?
Jika Anda seorang programmer tingkat lanjut, Anda memerlukan alat-alat canggih. Dan tidak ada alat yang lebih maju dari Lisp. Atau, dengan kata lain: Jawabannya adalah ya jika masalah Anda sulit. Tidak sebaliknya.
sumber
Menanggapi @lassevk :
sumber
sintaks yang rumit ??
Sintaks untuk lisp sangat sederhana .
Aplikasi pembunuh ditulis dalam lisp: emacs . Lisp akan memungkinkan Anda untuk memperluas emacs sesuka hati untuk melakukan hampir semua hal yang dapat Anda pikirkan yang mungkin dilakukan oleh seorang editor.
Tapi , Anda hanya harus belajar cadel jika Anda mau , dan Anda mungkin tidak pernah bisa digunakan di tempat kerja, tetapi itu masih mengagumkan.
Juga, saya ingin menambahkan: bahkan jika Anda menemukan tempat di mana lisp akan masuk akal, Anda mungkin tidak akan meyakinkan orang lain bahwa itu harus digunakan di java, c ++, c #, python, ruby, dll.
sumber
Saya tidak bisa menjawab dari pengalaman langsung tetapi Anda harus membaca apa yang ditulis Paul Graham di Lisp . Adapun bagian "aplikasi pembunuh", baca Mengalahkan rata-rata .
sumber
Saya memprogram di Lisp secara profesional selama sekitar satu tahun, dan itu pasti layak dipelajari. Anda akan memiliki kesempatan yang tak tertandingi untuk menghapus redundansi dari kode Anda, dengan bisa mengganti semua kode boilerplate dengan fungsi di mana mungkin, dan makro di mana tidak. Anda juga akan dapat mengakses fleksibilitas tak tertandingi pada saat runtime, menerjemahkan secara bebas antara kode dan data. Dengan demikian, situasi di mana tindakan pengguna dapat memicu kebutuhan untuk membangun struktur kompleks secara dinamis adalah tempat Lisp benar-benar bersinar. Penjadwal penerbangan maskapai populer ditulis dalam Lisp, dan ada juga banyak CAD / CAM di Lisp.
sumber
Jika Anda suka pemrograman, Anda harus belajar Lisp untuk kesenangan murni itu. XKCD dengan sempurna mengungkapkan pencerahan intelektual yang terjadi kemudian. Belajar Lisp bagi programmer adalah meditasi bagi bhikkhu Budha (dan saya maksudkan ini tanpa konotasi yang menghujat).
sumber
Lisp sangat berguna untuk membuat DSL kecil. Saya punya salinan Lisp dalam Kotak yang sedang berjalan di tempat kerja dan saya telah menulis DSL kecil untuk menginterogasi database SQL server dan menghasilkan lapisan data dll dalam C #. Semua kode pelat ketel saya sekarang ditulis dalam macro lisp yang menghasilkan C #. Saya menghasilkan HTML, XML, segala macam hal dengannya. Meskipun saya berharap bisa menggunakan Lisp untuk koding sehari-hari, Lisp dapat membawa manfaat praktis.
sumber
Bahasa apa pun terlihat jauh lebih sulit ketika seseorang tidak menggunakan konvensi indentasi umum dari suatu bahasa. Ketika seseorang mengikuti mereka dari Lisp, orang melihat bagaimana itu mengekspresikan struktur pohon sintaksis cukup mudah (perhatikan, ini tidak cukup tepat karena pratinjau terletak sedikit; r harus sejajar dengan fns dalam argumen quicksort rekursif):
sumber
let
dan menggunakandefun
pada awal fungsi untuk mendefinisikanfn
karena tidak berubah.Saya menemukan bahwa mempelajari bahasa baru, selalu memengaruhi gaya pemrograman Anda dalam bahasa yang sudah Anda kenal. Bagi saya itu selalu membuat saya berpikir dalam berbagai cara untuk memecahkan masalah dalam bahasa utama saya, yaitu Java. Saya pikir secara umum, itu hanya memperluas wawasan Anda dalam hal pemrograman.
sumber
Jika Anda harus bertanya pada diri sendiri apakah Anda harus belajar lisp, Anda mungkin tidak perlu melakukannya.
sumber
Saya mengambil "kelas cadel" di perguruan tinggi pada tahun delapan puluhan. Meskipun grokking semua konsep yang disajikan di kelas, aku ditinggalkan tanpa apapun penghargaan untuk apa yang membuat besar cadel. Saya takut bahwa banyak orang melihat lisp hanya sebagai bahasa pemrograman lain, yang dilakukan oleh mata kuliah di perguruan tinggi bertahun-tahun yang lalu. Jika Anda melihat seseorang mengeluh tentang sintaksis lisp (atau kekurangannya), ada kemungkinan besar bahwa mereka adalah salah satu dari orang-orang yang telah gagal memahami kebesaran lisp. Saya adalah salah satu dari orang-orang itu untuk waktu yang sangat lama.
Tidak sampai dua dekade kemudian, ketika saya menyalakan kembali minat saya pada lisp, saya mulai "mendapatkan" apa yang membuat lisp menarik - bagi saya toh. Jika Anda berhasil mempelajari cadel tanpa pikiran Anda hancur oleh penutupan dan makro cadel, Anda mungkin telah melewatkan intinya.
sumber
Mempelajari LISP / Skema mungkin tidak memberi Anda ruang aplikasi yang meningkat, tetapi itu akan membantu Anda lebih memahami pemrograman fungsional, aturannya, dan pengecualiannya.
Ini sepadan dengan investasi waktu hanya untuk mempelajari perbedaan keindahan dari enam fungsi murni bersarang, dan mimpi buruk dari enam fungsi bersarang dengan efek samping.
sumber
Dari http://www.gigamonkeys.com/book/introduction-why-lisp.html
sumber
"Lisp layak dipelajari untuk pengalaman pencerahan mendalam yang akan Anda miliki ketika Anda akhirnya mendapatkannya; pengalaman itu akan membuat Anda menjadi programmer yang lebih baik untuk sisa hari-hari Anda, bahkan jika Anda tidak pernah benar-benar menggunakan Lisp sendiri."
--Eric S. Raymond, "Bagaimana Menjadi Peretas"
http://www.paulgraham.com/avg.html
sumber
Saya setuju bahwa Lisp adalah salah satu bahasa yang mungkin tidak pernah Anda gunakan dalam pengaturan komersial. Tetapi bahkan jika Anda tidak mengerti, mempelajarinya pasti akan memperluas pemahaman Anda tentang pemrograman secara keseluruhan. Sebagai contoh, saya belajar Prolog di perguruan tinggi dan sementara saya tidak pernah menggunakannya setelah itu, saya memberi saya pemahaman yang lebih besar tentang banyak konsep pemrograman dan (kadang-kadang) apresiasi yang lebih besar untuk bahasa yang saya gunakan.
Tetapi jika Anda akan mempelajarinya ... dengan segala cara, baca On Lisp
sumber
Lisp pembelajaran akan menempatkan Javascript dalam cahaya yang sama sekali berbeda! Lisp benar-benar memaksa Anda untuk memahami kedua rekursi dan keseluruhan "fungsi sebagai objek kelas satu" -paradigma. Lihat Crockfords artikel bagus tentang Skema vs Javascript . Javascript mungkin adalah bahasa yang paling penting saat ini, jadi memahaminya dengan lebih baik sangat bermanfaat!
sumber
Gimp's Script-Fu sangat menarik. Itu adalah aplikasi photoshop-killer.
sumber
Oke, saya mungkin aneh tapi saya benar-benar tidak suka esai Paul Graham bahwa banyak & tentang Lisp adalah buku yang benar-benar kasar jika Anda belum memiliki pemahaman tentang Common Lisp. Sebaliknya, saya akan mengatakan pergi untuk Siebel's Practical Common Lisp . Sedangkan untuk "killer-apps", Common Lisp tampaknya menemukan tempatnya di toko-toko khusus, seperti ITA , jadi sementara tidak ada aplikasi yang identik dengan CL seperti halnya Rails untuk Ruby, ada beberapa tempat di industri yang menggunakannya jika Anda melakukannya. sedikit menggali.
sumber
Sintaksis yang rumit? Keindahan lisp adalah ia memiliki sintaks yang sangat sederhana. Ini hanya daftar, di mana setiap elemen daftar dapat berupa daftar lain atau tipe data dasar.
Ini layak dipelajari karena cara itu meningkatkan kemampuan pengkodean Anda untuk memikirkan dan menggunakan fungsi sebagai tipe data lainnya. Ini akan meningkatkan pada cara Anda kode dalam bahasa imperatif dan / atau berorientasi objek karena akan memungkinkan Anda untuk lebih fleksibel secara mental dengan bagaimana kode Anda disusun.
sumber
Untuk menambah jawaban lain:
Karena kursus SICP (videonya tersedia di sini ) luar biasa: mengajari Anda Canggung dan banyak lagi !
sumber
Aplikasi pembunuh? Franz Inc. memiliki daftar panjang kisah sukses , tetapi daftar ini hanya mencakup pengguna AllegroCL ... Mungkin ada yang lain. Favorit saya adalah kisah tentang Anjing Nakal , karena saya adalah penggemar berat game Crash Bandicoot.
Untuk mempelajari Common Lisp, saya akan merekomendasikan Praktis Common Lisp . Ini memiliki pendekatan langsung yang setidaknya bagi saya membuatnya lebih mudah daripada buku-buku lain yang pernah saya baca.
sumber
Anda dapat menggunakan Clojure hari ini untuk menulis tes dan skrip di atas Java VM. Sementara ada bahasa Lisp lain yang diimplementasikan pada JVM, saya pikir Clojure melakukan pekerjaan terbaik untuk mengintegrasikan dengan Java.
Ada saat-saat ketika bahasa Jawa sendiri menghalangi penulisan tes untuk kode Java (termasuk "pemrograman komersial tradisional"). (Saya tidak bermaksud bahwa sebagai dakwaan terhadap Jawa - bahasa lain menderita masalah yang sama - tetapi ini adalah fakta. Karena topiknya, bukan Jawa, saya tidak akan menjelaskannya. Silakan memulai topik baru jika seseorang ingin mendiskusikannya.) Clojure menghilangkan banyak hambatan itu.
sumber
Lisp dapat digunakan di mana saja Anda menggunakan pemrograman tradisional. Itu tidak jauh berbeda, hanya saja lebih kuat. Menulis aplikasi web? Anda dapat melakukannya di Lisp, menulis aplikasi desktop? Anda dapat melakukannya di Lisp, apa pun, Anda mungkin dapat melakukannya di Lisp, atau Python, atau pemrograman generik lainnya (ada beberapa bahasa yang hanya cocok untuk satu tugas).
Rintangan terbesar mungkin adalah penerimaan dari atasan, rekan kerja, atau pelanggan Anda. Itu sesuatu yang harus kamu kerjakan bersama mereka. Memilih solusi pragmatis seperti Clojure yang dapat memanfaatkan basis instalasi infrastruktur Java saat ini, dari JVM ke perpustakaan, mungkin dapat membantu Anda. Juga, jika Anda memiliki program Java, Anda dapat melakukan arsitektur plug-in dan menulis plug-in Clojure untuk itu dan akhirnya menulis setengah kode Anda di Clojure.
sumber
Bukan alasan tetapi (sepele) AutoCAD memiliki dukungan runtime LISP & DCL. Ini adalah cara yang nyaman untuk menulis makro kompleks (termasuk otomatisasi ActiveX) jika Anda tidak ingin menggunakan VBA atau C ++ atau .NET SDKs, atau jika ekspresi DIESEL tidak memotongnya.
Banyak fungsi AutoCAD sebenarnya adalah rutinitas LISP.
sumber
Ini adalah topik yang saya sendiri telah pertimbangkan untuk sementara waktu tetapi saya belum benar-benar mengambil keputusan, karena waktu yang biasa adalah masalah utama ...;)
Dan karena saya tidak dapat menemukan tautan ini di dalam posting ini, saya menambahkannya untuk kepentingan umum:
Kisah Sukses dan Kegagalan: Lisping di JPL
Kisah sukses yang benar-benar mengesankan: Lisp digunakan di perusahaan Orbitz
Perbandingan dan analisis apakah akan menggunakan Lisp sebagai ganti Java: Lisp sebagai Alternatif untuk Java
sumber
Sintaks tidak relevan, keterbacaan tidak!
sumber
Tidak mengatakan ini adalah aplikasi pembunuh tetapi sepertinya itu bisa menjadi keren http://code.google.com/p/plop/
sumber
Aplikasi pembunuh? Mesin pencari penerbangan oleh ITA Software adalah satu.
Adapun "mengapa", itu kemungkinan besar akan membuat Anda menjadi pengembang yang lebih baik dan sangat tidak mungkin membuat Anda menjadi lebih buruk. Namun, itu mungkin membuat Anda lebih suka dialek bahasa Inggris dari bahasa lain.
sumber