it-swarm-id.com

Haskell AND LISP vs Haskell OR Lisp

Saat ini saya kode dengan C, C++, dan Python. Saya ingin mengambil bahasa pemrograman fungsional, dan sekarang saya condong ke Haskell. Saya TIDAK ingin memulai perang "Haskell vs LISP" di sini; yang ingin saya ketahui adalah ini: jika saya mempelajari Haskell terutama untuk paparan pemrograman fungsional, apa manfaatnya, jika ada, yang akan saya dapatkan dari pembelajaran Lisp nanti?

41
Zeke

Saya sarankan belajar keduanya, Haskell pertama, kemudian Common LISP. Pengalaman saya dengan Haskell adalah bahwa pengetikan statis tampaknya menjadi gangguan yang membatasi pada awalnya, tetapi begitu saya terbiasa, saya perhatikan bahwa sebagian besar kesalahan jenis saya memiliki kesalahan logika yang bersembunyi di belakang mereka. Ketika Anda sampai pada titik ini, dan tonggak sejarah berikutnya, yang belajar untuk berpikir dalam tipe dan mendefinisikan tipe Anda sendiri sebagai sarana untuk mengekspresikan solusi Anda, Anda akan siap untuk LISP Umum.

Dengan Common LISP, Anda dapat menambahkan monad, currying, dan semua yang Anda suka dari Haskell, tetapi Anda juga mendapatkan banyak warisan seperti yang disebutkan Frank Shearar, dan fungsi generik dengan beberapa pengiriman, dan sistem penanganan pengecualian canggih.

Jadi mengapa tidak mempelajari Common LISP dulu? Berasal dari latar belakang prosedural dan OOP, pengalaman saya adalah bahwa saya tidak benar-benar memahami pemrograman fungsional sampai saya harus menggunakannya secara eksklusif. Setelah pemrograman fungsional nyaman, Anda dapat menambahkan sisa dari alat yang disediakan LISP Umum, dan gunakan alat apa pun yang terbaik untuk tugas yang ada.

58
Larry Coleman

Dan tolong.

Haskell mengajarkan Anda yang paling murni dari FP, sejauh yang saya ketahui setidaknya, seperti Smalltalk mengajarkan yang paling murni dari OO. (Saya menyebutkan ini bukan untuk menyarankan bahwa OO dan FP tidak dapat menikah, tetapi karena kedua bahasa ini adalah bahasa "permata" - ide inti diambil untuk ekstrem.)

LISP benar-benar sebuah keluarga bahasa, jadi saya akan berbicara tentang Common LISP karena itulah anggota keluarga tertentu yang saya gunakan.

LISP masih akan memiliki banyak hal untuk diajarkan kepada Anda:

  • Ini multi-paradigma, jadi dsimcha menunjukkan itu akan menunjukkan kepada Anda bagaimana mengintegrasikan FP dengan paradigma lain.
  • LISP akan mengajarkan Anda bahwa "code-is-data, data-is-code", misalnya melalui makro.
  • CLOS adalah merek OO yang sangat menarik, dengan banyak pewarisan yang berfungsi, dan fungsi generik.
31
Frank Shearar

Haskell dan LISP adalah dua binatang yang sama sekali berbeda.

Haskell adalah sejenis "pemrograman fungsional murni di menara gading"

LISP adalah jenis "code-is-data/data-is-code/buat konstruksi bahasa Anda sendiri". Anda dapat memanipulasi kode Anda dengan cara apa pun yang dapat Anda bayangkan.

Mereka sangat berbeda. Keduanya berbagi aspek "pemrograman fungsional", tapi itu benar-benar titik kecil yang sama dibandingkan dengan perbedaan mereka. Coba saja dan Anda akan melihat betapa berbedanya mereka!

11
dagnelies

Mempelajari LISP nantinya akan memungkinkan Anda untuk menyesuaikan Emacs yang bisa dibilang adalah editor teks paling canggih yang tersedia. Anda tidak dapat melakukannya di Haskell.

11
user1249

Manfaat utama yang saya lihat dari mempelajari LISP adalah belajar bagaimana mengintegrasikan FP ke dalam bahasa multi-paradigma yang berorientasi dunia nyata, daripada hanya mempelajarinya dalam konteks bahasa akademik yang menekankan kemurnian.

7
dsimcha

Saya juga berasal dari latar belakang C/C++/Python dan telah mencoba FP beberapa kali dalam beberapa tahun terakhir. Awalnya saya melihat Haskell dan tidak bisa membuat kepala atau ekor dari itu , kemudian mencoba Ocaml tetapi tidak terlalu jauh dengan itu. Akhirnya saya mulai mendengar hal-hal baik tentang Scala, mencobanya, dan menemukan itu sangat cocok untuk saya (saya juga telah melakukan sedikit Java = di masa lalu), sampai-sampai setelah setahun berkecimpung di Scala (dan mengirim 161 masalah Project Euler dengannya), Haskell tampaknya jauh lebih masuk akal. Sebenarnya saya baru saja memesan beberapa buku tentang Haskell dan ingin mencoba lagi, walaupun ini sebagian besar dimotivasi oleh keberadaan Scalaz.

Jadi saya menemukan menggunakan bahasa multi-paradigma (yaitu Scala, tetapi LISP mungkin akan cocok dengan tagihan juga) cara yang baik untuk FP. Tetapi jika Anda senang menyelam ke Haskell (saya tidak), lakukanlah.

5
timday

Saya awalnya berasal dari latar belakang C/C++/Ruby dan saya menggunakan FP konsep dalam Ruby kapan pun saya bisa. Keadaan hanya agak melukai otak saya. Salah satu teman saya menelepon saya suatu hari, dan dia meminta saya untuk menulis sesuatu di Haskell (pertama saya - dan semoga tidak bertahan lama - pekerjaan Haskell!). Saya cepat belajar bahasa dan saya mengumpulkan sesuatu yang berhasil. Itu tidak cantik atau apa pun, tetapi berhasil.

Saya mengambil cuti sebulan dari Haskell karena saya tidak punya apa-apa untuk menggunakannya. Tetapi ketika saya memutuskan untuk menulis perangkat lunak blog saya sendiri, saya menggunakan Haskell ( https://symer.io ). Haskell sangat keren karena Anda dapat memecahkan masalah menjadi beberapa bagian dan mengimplementasikan bagian-bagian ini secara berbeda berdasarkan input. Haskell juga menangani kegagalan dengan sangat baik melalui nilai-nilai tinju yang cerdas. Ada begitu banyak alat untuk bekerja dengan kotak-kotak ini sehingga Anda lupa bahwa kotak itu ada.

Pengalaman saya dengan LISP (Skema) benar-benar negatif. Tidak hanya bahasanya tidak memiliki perangkat yang cerdas dan sederhana ini, ia juga terasa sangat berbahaya seperti Ruby atau JavaScript. Itu adalah pengalaman yang mengerikan dan tidak menawarkan hal baru di luar Ruby atau Python.

C++ tidak dapat menampung lilin di Haskell, di luar manajemen memori. Haskell sama cepat (jika tidak lebih cepat), secara signifikan lebih singkat, dan jauh lebih aman. Tapi keamanan Haskell tidak pernah menghalangi.

TL; TR Haskell menghirup udara segar, dan LISP adalah Ruby yang sedikit lebih fungsional.

2
Nate Symer