it-swarm.dev

Haskell VE LISP ve Haskell OR Lisp

Şu anda C, C++ ve Python ile kod yazıyorum. İşlevsel bir programlama dili seçmek istiyorum ve şu anda Haskell'e doğru eğildim. Burada bir "Haskell vs LISP" savaşı başlatmak istemiyorum; bilmek istediğim şudur: Haskell'i öncelikle fonksiyonel programlamaya maruz kalmayı öğrenirsem, eğer daha sonra Lisp öğrenmekten ne gibi yararlar elde edeceğim?

41
Zeke

Önce Haskell, sonra Common LISP'yi öğrenmenizi öneririm. Haskell ile yaşadığım deneyim, statik yazımın ilk başta kısıtlayıcı bir sıkıntı gibi göründüğüydü, ancak bir kez alıştım, tip hataların çoğunun arkasında saklanan mantık hataları olduğunu fark ettim. Bu noktaya geldiğinizde ve türlerde düşünmeyi ve kendi türlerinizi çözümünüzü ifade etmenin bir yolu olarak tanımlamayı öğrenen bir sonraki dönüm noktası, Ortak LISP için hazır olacaksınız.

Common LISP ile, Monad'ları, köriyi ve Haskell'den beğendiğiniz her şeyi ekleyebilirsiniz, ancak Frank Shearar'ın bahsettiği gibi çoklu kalıtım ve çoklu sevkıyatlı genel fonksiyonlar ve gelişmiş bir istisna işleme sistemi elde edersiniz.

Öyleyse neden sadece önce Ortak LISP'yi öğrenmek değil? Yordamsal ve OOP arka planından geldiğimde, benim deneyimim, yalnızca tamamen kullanmam gerekene kadar fonksiyonel programlamayı gerçekten anlamadım. İşlevsel programlama rahat olduktan sonra, Common LISP'nin sunduğu araçlar ve eldeki görevde en iyi olan aracı kullanın.

58
Larry Coleman

Ve lütfen.

Haskell size en azından bildiğim kadarıyla FP'nin en safını öğretiyor, tıpkı Smalltalk'ın OO'nun en safını öğrettiği gibi. (Bunu OO ve FP evlenemediğini, ancak her iki dilin de “mücevher” dilleri olduğu için önermiyorum.) Aşırı.)

LISP gerçekten bir dil ailesidir, bu yüzden Common LISP hakkında konuşacağım çünkü bu benim kullandığım ailenin belirli bir üyesi.

LISP'nin size öğretecek çok şeyi olacak:

  • Bu multaradigm, dsimcha dikkat çekiyor size FP diğer paradigmalarla nasıl entegre edeceğinizi gösterecektir.
  • LISP size, örneğin makroları aracılığıyla "kod-veri, veri-kod" olduğunu öğretecektir.
  • CLOS, işe yarayan çoklu kalıtım ve genel işlevlere sahip çok ilginç bir OO markasıdır.
31
Frank Shearar

Haskell ve LISP birbirinden tamamen farklı iki canavardır.

Haskell "fildişi bir kulede saf fonksiyonel programlama" türünde

LISP, "code-is-data/data-is-code/kendi dil yapılarınızı oluşturur" türündedir. Kodunuzu hayal edebileceğiniz herhangi bir şekilde değiştirebilirsiniz.

Onlar çok farklı. Her ikisi de "işlevsel programlama" yönünü paylaşıyor, ancak bu farklılıklarına kıyasla gerçekten küçük bir ortak nokta. Sadece deneyin ve ne kadar farklı olduklarını göreceksiniz!

11
dagnelies

LISP'yi daha sonra öğrenmek, mevcut en gelişmiş metin editörü olan Emacs'ı özelleştirmenize izin verecektir. Haskell'de bunu yapamazsın.

11
user1249

LISP öğrenmekten gördüğüm temel fayda, yalnızca saflığı vurgulayan bir akademik dil bağlamında öğrenmektense, FP) gerçek dünyaya yönelik çokdilli bir dile nasıl entegre edileceğini öğrenmektir.

7
dsimcha

Ayrıca bir C/C++/Python geçmişinden geldim ve FP son birkaç yılda birkaç kez denedim. Başlangıçta Haskell'e baktım ve başını veya kuyruğunu yapamadım. , sonra Ocaml denedim ama daha fazla alamadım.Sonunda Scala hakkında iyi şeyler duymaya başladım, denedim ve bana çok uygun buldum (ayrıca Java) = geçmişte), Scala (ve onunla 161 Project Euler problemlerini göndererek) içinde bir yıl geçtikten sonra, Haskell çok daha mantıklı görünüyor. Haskell hakkında birkaç kitap sipariş ettim ve başka bir şans vermek istiyorum, ancak bu Scalaz'ın varlığı tarafından büyük ölçüde motive ediliyor.

Bu yüzden çok paradigma dili (Scala, ancak LISP muhtemelen tasarıyı da sığdıracak) kullanarak FP'ye iyi bir yol buldum. Ama eğer Haskell'e dalmaktan mutluysan (ben değildim), git.

5
timday

Başlangıçta bir C/C++/Ruby arka planından geldim ve yapabildiğim her zaman FP içinde Ruby kavramlarını kullandım. Devlet biraz beynime zarar verdi. Arkadaşlarımdan biri beni bir gün çağırdı ve Haskell'de bir şeyler yazmamı istedi (ilk - ve umarım son değil - Haskell işi!). Dili çabucak öğrendim ve işe yarayan bir şey attım. Güzel ya da hiçbir şey değildi, ama işe yaradı.

Haskell'den bir ay ara verdim çünkü kullanacak hiçbir şeyim yoktu. Ama kendi blog yazılımımı yazmam gerektiğine karar verdiğimde Haskell ( https://symer.io ) kullandım. Haskell gerçekten harika çünkü parçaları parçalara ayırabilir ve bu parçaları girdiye göre farklı şekilde uygulayabilirsiniz. Haskell ayrıca değerlerin akıllı boksu yoluyla başarısızlığı son derece iyi idare eder. Bu kutularla çalışmak için o kadar çok araç var ki, sadece var olduklarını unutuyorsunuz.

LISP (Şema) ile yaşadığım deneyim tamamen olumsuzdu. Dil sadece bu akıllı, basit araçlardan yoksun değil, aynı zamanda Ruby veya JavaScript kadar tehlikeli derecede gevşek hissediyordu. Korkunç bir deneyim oldu ve Ruby veya Python'un ötesinde yeni bir şey sunmuyor.

C++, bellek yönetimi dışında Haskell'e mum tutamaz. Haskell, daha hızlı (daha hızlı değilse), önemli ölçüde daha kısa ve çok daha güvenlidir. Ancak Haskell'in güvenliği asla engel olmaz.

TL; TR Haskell temiz bir nefes ve LISP biraz daha işlevsel bir Ruby.

2
Nate Symer