Haskell'den sonra hangi dil öğrenilmeli? [kapalı]


85

İlk programlama dilim olarak Haskell'i öğrenmeye karar verdim. Ben bir analitik felsefe uzmanıyım ve Haskell, örneğin doğal dil ayrıştırma için dönüştürücüler, teorem kanıtlayıcılar ve tercümanlar gibi ilgi çekici programları hızlı ve doğru bir şekilde oluşturmama izin verdi. Yalnızca iki buçuk aydır programlama yapmama rağmen, Haskell'in anlambilimini ve sözdizimini öğrenmeyi daha geleneksel zorunlu dillere göre çok daha kolay buldum ve yapılarının çoğunda (şimdi) rahat hissediyorum.

Haskell'de programlama sihir gibidir, ancak programlama bilgimi genişletmek istiyorum. Öğrenmek için yeni bir programlama dili seçmek istiyorum, ancak keyfi bir dili alıp bırakmak ve tekrar etmek için yeterli zamanım yok. Bu yüzden, aradığım dil türü ile ilgili birkaç şartla birlikte soruyu burada soracağımı düşündüm. Bazıları özneldir, bazıları Haskell'den geçişi kolaylaştırmayı amaçlamaktadır.

  • Güçlü tip sistem. Haskell'de programlamanın en sevdiğim bölümlerinden biri tür bildirimleri yazmaktır. Bu, bireysel işlevler ve bunların bir bütün olarak programla ilişkileri hakkındaki düşüncelerimi yapılandırmaya yardımcı olur. Ayrıca programımın doğruluğu hakkında gayri resmi mantık yürütmeyi de kolaylaştırıyor. Doğrulukla ilgileniyorum, verimlilikle değil.
  • Yinelemeden ziyade özyinelemeye vurgu. Haskell'de yinelemeli yapılar kullanıyorum, ancak bunları yinelemeli olarak uyguluyorum. Bununla birlikte, bir yinelemeli işlevin yapısını anlamak karmaşık bir yinelemeli yordamdan çok daha kolaydır, özellikle birleştiriciler ve haritalar, kıvrımlar ve bağlama gibi yüksek dereceli işlevler kullanılırken.
  • Öğrenmeyi ödüllendirmek. Haskell, çalışmak için ödüllendirici bir dil. Biraz Kant okumaya benziyor. Ancak birkaç yıl önceki C deneyimim değildi. C'yi aramıyorum. Dil, kavramsal olarak ilginç bir paradigmayı zorlamalıdır, ki benim tamamen öznel görüşüme göre, C beğenileri bunu yapmaz.

Cevapların tartılması : Bunlar elbette sadece notlardır. Sadece iyi hazırlanmış yanıtlar veren herkese cevap vermek istiyorum. Çok yardımcı oldun.

1) Birkaç yanıt, yinelemeyi vurgulayan güçlü, statik olarak yazılmış bir dilin başka bir işlevsel dil anlamına geldiğini gösterdi. Haskell ile güçlü bir şekilde çalışmaya devam etmek isterken, camccann ve larsmans doğru bir şekilde böyle bir dilin "geçişi çok kolaylaştıracağına" işaret ettiler. Bu yorumlar çok yardımcı oldu, çünkü Haskell'i Caml'da yazmak istemiyorum! İspat asistanlarından Coq ve Agda ilginç görünüyor. Coq özellikle yapıcı mantık ve biçimsel tip teorisine sağlam bir giriş sağlayacaktır. Birinci dereceden yüklem ve modal mantık (Mendellsohn, Enderton, Hinman'ın bir kısmı) ile biraz zaman geçirdim, bu yüzden muhtemelen Coq ile çok eğlenirim.

2) Diğerleri Lisp'i (Common Lisp, Scheme ve Clojure) çok tercih etti. Anladığım kadarıyla, hem Common Lisp hem de Scheme mükemmel bir giriş materyaline sahipler ( Lisp ve The Reasoned Schemer , SICP ). SICP'deki materyal, Scheme'ye yönelmeme neden oluyor. Özellikle, SICP yoluyla Şema, farklı bir değerlendirme stratejisini, tembelliğin uygulanmasını ve devamlar, tercümanlar, sembolik hesaplama vb. Gibi konulara odaklanma şansını kapsayacaktır. Son olarak, diğerlerinin de belirttiği gibi, Lisp'in kod / veri işleyişi tamamen yeni olacaktır. Bu nedenle, bir Lisp olan (2) seçeneğine yoğun bir şekilde eğiliyorum.

3) Üçüncüsü, Prolog. Prolog'un pek çok ilginç materyali var ve birincil alanı tam olarak ilgilendiğim alan. Basit bir sözdizimine sahip ve okunması kolay. Şu anda daha fazla yorum yapamam, ancak Prolog'un bir özetini okuduktan ve bazı giriş materyallerini gözden geçirdikten sonra, (2) ile sıralanır. Görünüşe göre Prolog'un geri dönüşü her zaman Haskell'e giriyor!

4) Yaygın dillerden Python en ilginç olanıdır. Tim Yates, dillerin kulağa çok çekici gelmesini sağlıyor. Görünüşe göre, Python genellikle birinci sınıf bilgisayar bilimleri ana dallarına öğretiliyor; yani kavramsal olarak zengin veya öğrenmesi kolay. Daha fazla araştırma yapmam gerekecek.

Önerileriniz için hepinize teşekkür ederim! Bir Lisp (Scheme, Clojure), Prolog veya Coq veya Agda gibi bir ispat asistanı tavsiye edilen ana diller gibi görünüyor.


34
Herhangi bir dili derinlemesine öğrenmek için 2,5 ay yeterli değil, balonunuzu patlattığım için üzgünüm.
Woot4Moo

20
Bu kesinlikle doğru. Haskell'i "öğrendiğimi" ima etmek istemedim, bu ne anlama geliyorsa. Dili kullanırken kendimi rahat hissettiğimi kastettim. Açıkça "öğrenmeyi bırakmayacağım".
danportin

10
@Michael: Verimlilik yerine doğruluk için kodlama, daha çok görmek istediğim bir şey ...
Deniz Doğan

24
@ Woot4Moo: 2.5 ay, bir dille "rahat" olmak için bolca zaman. Biçimsel mantığa aşinaysa ve felsefe geçmişinden soyut kavramlarla çalışıyorsa, iki katına çıkar. Diğer dillerden alışkanlıkları unutmak da bu durumda yardımcı olacaktır.
CA McCann

8
@gnovice: Kesinlikle birçok kez soruldu. Ama Haskell ile ilk ciddi programlama deneyimini yapmış biriyle ilk kez karşılaşıyorum. Sanki zamanın oku tersine çevrilmiş gibi.
Muhammad Alkarouri

Yanıtlar:


85

Programlama bilgimi genişletmek istiyorum. (...) Aradığım dil türü ile ilgili birkaç şartla birlikte soruyu burada soracağımı düşündüm. Bazıları özneldir, bazıları Haskell'den geçişi kolaylaştırmayı amaçlamaktadır.

Güçlü tip sistem. (...) Programımın doğruluğu hakkında gayri resmi mantık yürütmeyi de kolaylaştırıyor. Doğrulukla ilgileniyorum, verimlilikle değil.

Yinelemeden ziyade özyinelemeye vurgu. (...)

Korkarım burada geçişi biraz fazla kolaylaştırıyor olabilirsiniz. Çok katı tip sistemi ve tamamen işlevsel stil Haskell'in karakteristik özelliğidir ve ana akım bir programlama diline benzeyen hemen hemen her şey, bunlardan en azından bir şekilde ödün vermeyi gerektirecektir. Bu nedenle, bunu akılda tutarak, Haskell hakkında beğendiğiniz şeylerin çoğunu korumayı amaçlayan birkaç geniş öneri , ancak bazı büyük değişikliklerle birlikte.

  • Pratikliği göz ardı edin ve "Haskell'den daha fazla Haskell" tercih edin : Haskell'in tip sistemi, sonlandırılmaması ve diğer karmaşık ödünler nedeniyle deliklerle dolu. Karmaşayı temizleyin ve daha güçlü özellikler ekleyin; Coq ve Agda gibi bir işlev türünün doğruluğunun bir kanıtı içerdiği diller elde edersiniz (işlev okunu ->mantıksal çıkarım olarak bile okuyabilirsiniz !) Bu diller matematiksel kanıtlar ve son derece yüksek doğruluk gereksinimleri olan programlar için kullanılmıştır. Coq, muhtemelen stilin en belirgin dilidir, ancak Agda'nın daha Haskell-y hissi vardır (ayrıca Haskell'de yazılmıştır).

  • Türleri göz ardı edin, daha fazla sihir ekleyin : Haskell büyücüyse, Lisp yaratılışın ham, ilkel büyüsüdür. Lisp ailesi dilleri ( Scheme ve Clojure dahil ), aşırı minimalizmle birlikte neredeyse benzersiz bir esnekliğe sahiptir. Dillerin esasen sözdizimi yoktur, kodu doğrudan bir ağaç veri yapısı biçiminde yazarlar; Lisp'de meta programlama, bazı dillerde meta olmayan programlamadan daha kolaydır.

  • Biraz uzlaşın ve ana akıma yaklaşın : Haskell, ML'den büyük ölçüde etkilenen geniş dil ailesine giriyor ve bunlardan herhangi birine muhtemelen çok fazla zorluk çekmeden geçebilirsiniz . Haskell, diğerlerinin genellikle ya karma stiller olduğu ve / veya çeşitli nedenlerle pragmatik tavizler verdikleri, işlevsel stilin türleri ve kullanımından gelen doğruluk garantileri söz konusu olduğunda en katı olanlardan biridir. OOP'ye biraz maruz kalmak ve birçok genel teknoloji platformuna erişmek istiyorsanız, JVM'de Scala veya F #.NET üzerinde Haskell ile pek çok ortak yön bulunurken, Java ve .NET platformları ile kolay birlikte çalışabilirlik sağlar. F # doğrudan Microsoft tarafından desteklenir, ancak Haskell ve Windows olmayan platformlarda taşınabilirlik sorunlarına kıyasla bazı can sıkıcı sınırlamaları vardır. Scala, Haskell'in daha fazla tip sistemine ve Java'nın çapraz platform potansiyeline doğrudan karşılıklara sahiptir, ancak daha ağır bir sözdizimine sahiptir ve F #'ın sahip olduğu güçlü birinci taraf desteğinden yoksundur.

Bu tavsiyelerin çoğu başka cevaplarda da belirtilmiştir, ancak umarım onlar için mantığım biraz aydınlanma sağlar.


4
Coq ve Agda ailesinden Qi II'ye de bakabilirsiniz .
Hynek -Pichi- Vychodil

Sizce F #'ın can sıkıcı sınırlamaları neler olabilir? Boş zamanlarında F # öğrenen biri olarak merak ediyorum.
Lucas

7
@Lucas: Büyük olana karşı çıplak kemikler Haskell, yüksek tür polimorfizm ve tip sınıflarının eksikliği. Bunun ötesinde, GHC'ye özgü birkaç uzantı oldukça güzel. Hiçbiri hiçbir şekilde ölümcül bir kusur değil, ama Haskell'e alıştıktan sonra o şeylere sahip olmamak biraz sakar geliyor. Modern C #'dan C # 1.x kullanmaya geri döndüğünüzü hayal edin ...
CA McCann

@HyneK: Bu Qi 2 dili ilk bakışta Coq veya Adga'dan çok ilginç ve daha esnek görünüyor. Görünüşe göre yazar onu bırakmaya karar vermiş. Bu dil üzerinde çalışmaya devam etmek için bir hareket var mı? Zaten yarı ölü olan bir şeyi öğrenmek istemem.
Alex

@Alex: Shen olarak devam ediyor gibi görünüyor: shenlanguage.org
amindfv

20

O Adam olacağım ve yanlış şeyi istediğini önereceğim.

Önce ufkunuzu genişletmek istediğinizi söylüyorsunuz. Sonra ne tür bir dil istediğinizi tanımlıyorsunuz ve bu dilin ufku, sahip olduğunuz ufuklara inanılmaz derecede benziyor. Aynı şeyi defalarca öğrenerek çok fazla şey kazanamayacaksınız.

Bir Lisp öğrenmenizi öneririm - yani Common Lisp, Scheme / Racket veya Clojure. Varsayılan olarak tümü dinamik olarak yazılmıştır, ancak bir tür tür ipucu veya isteğe bağlı statik yazım içerir. Racket ve Clojure muhtemelen en iyi bahislerinizdir.

Clojure daha yenidir ve varsayılan olarak değişmezlik gibi daha fazla Haskellism'e ve çok sayıda tembel değerlendirmeye sahiptir, ancak Java Virtual Machine'e dayanmaktadır, bu da bazı garip siğillere sahip olduğu anlamına gelir (örneğin, JVM kuyruk çağrısının ortadan kaldırılmasını desteklemiyor, bu nedenle özyineleme naziktir. bir hack).

Racket çok daha eski, ancak yol boyunca statik tip desteği ve işlevsel programlamaya odaklanma gibi çok fazla güç aldı. Bence muhtemelen Racket'ten en iyi şekilde yararlanacaksınız.

Lisps'teki makro sistemler çok ilginçtir ve başka herhangi bir yerde göreceğinizden çok daha güçlüdür. En azından tek başına bakmaya değer.


3
Heh, Haskell perspektifinden bakıldığında, yazım ipuçları veya isteğe bağlı statik yazım, tamamen dinamik yazımdan pek de farklı görünmüyor. Bu çok farklı bir zihniyet. Bununla birlikte, Lisp-y dilleri her türden eğlencelidir ve her programcının en azından öğrenmeye biraz zaman ayırması gerektiğini düşündüğüm bir şeydir.
CA McCann

19

Ana dalınıza neyin uygun olduğu açısından, açık seçim Prolog veya türevleri gibi bir mantık dili gibi görünür. Mantık programlama işlevsel bir dilde çok düzgün bir şekilde yapılabilir (bakınız, örneğin, The Reasoned Schemer ), ancak doğrudan mantık paradigması ile çalışmaktan hoşlanabilirsiniz.

Twelf veya coq gibi etkileşimli bir teorem kanıtlama sistemi de ilginizi çekebilir.


2
Tipik bir dille ilgilendiğinizi belirttiğinizde, yazılan bir üst düzey mantık programlama dili olan lambdaProlog'u tavsiye ederim. Derlenen uygulamalardan biri Teyjus - code.google.com/p/teyjus'dur (açıklama: Teyjus üzerinde çalıştım).
Zach Snow

18

Haskell programcısı için kendini rahat hissedecek, sözdizimi ile güçlü bir kanıt asistanı olan Coq'u öğrenmenizi tavsiye ederim . Coq ile ilgili harika olan şey, Haskell dahil diğer işlevsel dillere çıkarılabilmesidir. Hackage'da Coq'da yazılmış, çalışması hakkında kanıtlanmış özelliklere sahip olan ve ardından Haskell'e çıkarılan bir paket ( Meldable-Heap ) bile var .

Bir diğer popüler dil Haskell daha teklifler daha fazla güç olduğunu Agda - Ben bağımlı saygı duyduğum insanlar tarafından saygı kuyu Hackage üzerinde, daktilo ve bilerek ötesine Agda bilmiyorum ama bunlar benim için yeterince iyi nedenlerdir.

Bunların hiçbirinin kolay olmasını beklemiyorum. Ancak Haskell'i biliyorsanız ve Haskell tipi sistemden daha fazla güç veren bir dile ilerlemek istiyorsanız, o zaman dikkate alınmalıdır.


1
Agda, Haskell'in doğal "bir sonraki adımı" gibi görünüyor.
Deniz Doğan

5
Ayrıca, bir felsefe okulu olarak, biçimsel mantık konusunda çok fazla tecrübesi varsa, Curry-Howard tarzı ispat asistanlarının, çoğu deneyimli programcıya göre çok daha az kafa karıştırıcı olabileceğini de belirtmek gerekir!
CA McCann

11

Öznel ilgi alanlarınızın yanı sıra herhangi bir kısıtlamadan bahsetmediğiniz ve 'öğrenmeyi ödüllendirmeyi' vurguladığınız için (tamam, statik yazım kısıtlamasını görmezden geleceğim), farklı paradigmalardan birkaç dil öğrenmenizi öneririm ve tercihen her biri için 'örnek' niteliğindedir.

  • Veri olarak kod / homo-koniklik meselesi için bir Lisp lehçesi ve iyi oldukları için, en iyisi değilse de, dinamik (az ya da çok katı) işlevsel programlama dilleri örnekleri
  • Baskın mantık programlama dili olarak prolog
  • Tek gerçek OOP dili olarak Smalltalk (ayrıca genellikle son derece görüntü merkezli yaklaşımı nedeniyle ilginç)
  • eşzamanlı / paralel / dağıtılmış programlama için oluşturulmuş dillerle ilgileniyorsanız belki Erlang veya Clojure
  • Yığın tabanlı programlama için Forth
  • ( Katı işlevsel, statik olarak yazılmış tembel programlama için Haskell )

Özellikle Lisps (CL Scheme kadar değil) ve Prolog (ve Haskell) özyinelemeyi benimser.

Bu dillerin hiçbirinde bir guru olmasam da, Erlang ve Forth dışında her biriyle biraz zaman geçirdim ve hepsi bana göz açıcı ve ilginç öğrenme deneyimleri verdi, çünkü her biri problem çözmeye farklı bir açıdan yaklaşıyor .

Bu yüzden, birkaç dili denemek için vaktinizin olmamasıyla ilgili kısmı görmezden gelmişim gibi görünse de, bunlardan herhangi biriyle geçirilen zamanın boşa gitmeyeceğini ve hepsine bir göz atmanız gerektiğini düşünüyorum.



10

Yığın odaklı bir programlama diline ne dersiniz ? Kedi yüksek puanlarınıza ulaşır. Bu:

  • Tür çıkarımı ile statik olarak yazılmıştır.
  • Döngü gibi yaygın zorunlu dil kavramlarını yeniden düşünmenizi sağlar. Koşullu yürütme ve döngü ile işlenir , bağdaştırıcılarla .
  • Ödüllendirme - sizi başka bir hesaplama modelini anlamaya zorlar. Sorunları düşünmeniz ve ayrıştırmanız için size başka bir yol sunar.

Dr. Dobbs , 2008'de Cat hakkında kısa bir makale yayınladı, ancak dil biraz değişti.


10

Güçlü (daha) yazılmış bir Prolog istiyorsanız, Mercury ilginç bir seçimdir. Geçmişte bununla uğraştım ve bana verdiği farklı bakış açısını beğendim. Aynı zamanda tip sisteminde moded-lik (hangi parametrelerin serbest / sabit olması gerekir) ve determinizm (kaç sonuç vardır?) Vardır.

Clean , Haskell'e çok benzer, ancak Monad'lara (daha spesifik olarak, IO monad) alternatif olarak kullanılan benzersiz bir yazı tipine sahiptir. Benzersiz yazım, dizilerle çalışmak için ilginç şeyler de yapar.



8

Büyük kriterlerinizden birini (statik * yazarak) karşılamamasına rağmen, Python için bir durum oluşturacağım. İşte bir göz atmanız gerektiğini düşündüğüm birkaç neden:

  • Zorunlu bir dil için şaşırtıcı bir şekilde işlevseldir. Bunu öğrendiğimde beni etkileyen şeylerden biri buydu. Örneğin, liste anlayışlarını ele alalım. Lambdalar, birinci sınıf işlevler ve yineleyiciler üzerinde işlevsel olarak ilham alan birçok kompozisyona (haritalar, kıvrımlar, fermuarlar ...) sahiptir. Size soruna en uygun paradigmayı seçme seçeneği sunar.
  • IMHO, Haskell gibi kodlamak için güzeldir. Sözdizimi basit ve zariftir.
  • Verimliliğe çok ince bir şekilde odaklanmak yerine işleri basit bir şekilde yapmaya odaklanan bir kültüre sahiptir.

Yine de başka bir şey arıyorsanız anlıyorum. Örneğin, mantık programlama, diğerlerinin önerdiği gibi, tam size göre olabilir.


* Türleri bildirmek istediğiniz için burada statik yazmayı kastettiğinizi varsayıyorum. Techincally, Python olduğunu sen keyfi bir sayı olarak bir dize, yorumlamak diyemeyiz çünkü güçlü yazılmış bir dildir. İlginç bir şekilde, Boo gibi statik yazmaya izin veren Python türevleri var .


Güçlü tip sistemi sadece "statik" yazım anlamına gelmez.
Deniz Doğan

+1 ayrıca larsmans'ın cevabı hakkındaki yorumumu da görüyor. Ancak Python'u işlevsel olarak tanıtmaya dikkat edin. Örneğin, jeneratör ifadeler genellikle tercih edilir map, filtervb Ama yine de, jeneratörler ve jeneratör ifadeleri tembel değerlendirme bilir ve işlevlerini sözü birine tanıdık hissedeceksiniz.

16
Gerçekten mi? Python'un çoğunlukla işlevsel programlama yapmamış kişiler için özellikle işlevsel olduğunu düşünüyorum. Hem Python hem de Haskell'i oldukça fazla kullandım ve Python güzel bir dil olsa da ve kesinlikle işlevsel dillerden birkaç şey ödünç almış olsa da, yine de% 99 zorunlu.
CA McCann

@camccann Haklısın - bakış açım farklı, bu yüzden bunu sadece ilginç bir alternatif olarak sunuyorum. İlk önce zorunlu programlamayı öğrenen biri olarak, Python'un işlevsel teknikleri uygun oldukları yerde kullanmama ve başka bir şeyin mantıklı olduğu durumlarda bunlardan kaçınmama izin vermesini takdir ediyorum. Bunun "işlevsel" olduğunu iddia etmiyorum - sadece iyi bir uzlaşma sağlaması için.
Tim Yates

Haskell'den öğrenilen alışkanlıklar sizi, onu ilk dil olarak öğrenen diğerlerinden çok daha iyi bir Python programcısı yapabilir.
u0b34a0f6ae

8

Sana Erlang'ı tavsiye ederim. Bu güçlü yazılmış bir dil değildir ve denemelisiniz. Programlamaya çok farklı bir yaklaşımdır ve güçlü yazmanın En İyi Araç (TM) olmadığı durumlarda sorunlar olduğunu fark edebilirsiniz. Yine de Erlang size statik tip doğrulaması için araçlar sağlar (yazmacı, diyalizör) ve bundan fayda sağladığınız kısımlarda güçlü yazım kullanabilirsiniz. Sizin için ilginç bir deneyim olabilir ama hazırlıklı olun, çok farklı bir duygu olacaktır. "Kavramsal olarak ilginç paradigma" arıyorsanız, bunları Erlang'da, mesaj iletme, bellek ayırma yerine paylaşım, dağıtım, OTP, hata işleme ve hata "önleme" yerine hata yaymada bulabilirsiniz. Erlang, şu anki deneyiminizden uzak olabilir, ancak C ve Haskell ile deneyiminiz varsa, yine de beyin gıdıklayıcı olabilir.


8

Açıklamanız göz önüne alındığında, Ocaml veya F # öneririm .

ML ailesi genellikle güçlü bir tip sistem açısından çok iyidir. Örüntü eşleştirmeyle birlikte özyinelemeye yapılan vurgu da açıktır.

Biraz tereddütlü olduğum yer, öğrenmek için ödüllendirme kısmıdır. Bunları öğrenmek benim için hiç şüphesiz ödüllendiriciydi. Ancak kısıtlamalarınız ve ne istediğinizi açıklamanız göz önüne alındığında, aslında Haskell'den çok daha farklı bir şey aramıyorsunuz gibi görünüyor.

Kısıtlamalarınızı koymasaydınız Python veya Erlang'ı önerirdim , her ikisi de sizi konfor alanınızdan çıkarırdı.


6

Tecrübelerime göre, güçlü yazma + özyinelemeye vurgu, başka bir işlevsel programlama dili anlamına gelir. Sonra tekrar, hiçbirinin Haskell kadar "saf" olmayacağı düşünüldüğünde, bunun çok ödüllendirici olup olmadığını merak ediyorum.

Diğer posterlerin de önerdiği gibi, her ikisi de dinamik olarak yazılmış olsa da, Prolog ve Lisp / Scheme güzel. Özellikle Scheme hakkında güçlü bir teorik "zevke" sahip pek çok harika kitap yayınlanmıştır. Aynı zamanda birçok genel bilgisayar bilimi bilgeliğini (meta-döngüsel yorumlayıcılar ve benzerleri) aktaran SICP'ye bir göz atın .


4
İlk paragraf için +1, soruyu okuduğumda tam olarak düşündüğüm şey. Yeni şeyler öğrenmek adına, Python gibi modern bir mecburi dil öneririm - özellikle de OP'nin alıştığı şey olmadığı için (dinamik yazım, her yerde yineleyiciler vb.). Ayrıca metasınıflar veya üreteçler (tembel listelere çarpıcı bir şekilde benzeyen) / oluşturucu ifadeleri (liste anlayışları + oluşturucular için bir genelleme işlevi gören) gibi çok güzel gelişmiş kavramlara sahiptir. Ayrıca, dikte edin ve anlama kuralını ayarlayın.

3
@delnan: Haskell'in liste anlayışları da vardır ve üreteçler / yineleyiciler Haskell'in standart liste türü kullanılarak Haskell'de kolayca ifade edilebilir. Dolayısıyla, iki dil arasındaki en büyük fark, bence nesne yönelimli programlama ve (çoğu zaman) sözlükler gibi saf olmayan veri yapıları olacaktır.
Deniz Doğan

1
@Deniz Doğan: Python'da bildirimlerin ve uygun sözcük kapsamının eksikliğini unutmayın.
Fred Foo



5

Bir tip sistem tercihinizden sapmaya karar verirseniz, J programlama dili ilginizi çekebilir. Fonksiyon kompozisyonunu nasıl vurguladığı konusunda olağanüstüdür. Haskell'de noktasız stili seviyorsanız, J'nin zımni formu faydalı olacaktır. Özellikle anlambilim açısından olağanüstü düşündürücü buldum.

Doğru, ne istediğine dair önyargılarınıza uymuyor, ama bir göz atın. Sadece orada olduğunu bilmek keşfetmeye değer. Eksiksiz uygulamaların tek kaynağı J Software, jsoftware.com'dur.


0

Ana akarsulardan biriyle gidin. Mevcut kaynaklar, becerinizin gelecekteki pazarlanabilirliği, zengin geliştirici ekosistemi göz önüne alındığında, Java veya C # ile başlamanız gerektiğini düşünüyorum .


14
Haskell ile karşılaştırıldığında, her ikisi de oldukça zayıf diller IMO.
missingfaktor

9
Bir Haskeller'dan Java'ya taşınmasını istemek, Bill Gates'ten gecekondu mahallelerine taşınmasını istemek gibidir. : - /
missingfaktor

1
+1 Sizi kesinlikle olumsuz etkileyecek bir şey önerdiğiniz için. Java ve C # güzel ekosistemlere sahiptir ve her ikisi de ciddi işler için tavsiye edilir. Kesin bir artı olarak, JVM'de Clojure veya CLR'de F # kullanırken Haskell (Java ve C #) bilginizden yararlanabilirsiniz.
ponzao

6
@ponzao: Hayır, hayır, birinin Haskell'den Java'ya veya C #'ye gitmesinin korkunç ve acımasız olduğunu öne sürmek. Scala, F # ve Clojure , JVM / CLR'de çalıştırmanın sağladığı tüm avantajlara sahip çok daha hoş dillerdir.
CA McCann

5
Analitik bir felsefe için büyük Java veya C # zaman kaybıdır.
MaD70

0

Harika soru - Geçmişim çok farklı olsa da (organik kimya), Haskell'in tadını iyice çıkararak birkaç ay geçirdikten sonra son zamanlarda kendime soruyorum.

Sizin gibi, C ve benzeri söz konusu bile olamaz.

Python ve Ruby arasında, her ikisinin de beni mutlu edecek bazı işlevsel bileşenlere sahip olan iki pratik çalıştırma komut dosyası dili (katırlar?) Olarak gidip geliyorum. Burada herhangi bir Rubyist / Pythonist tartışması başlatmadan, ancak bu soruya kişisel pragmatik cevabım:

İlk önce başvurmak için bir bahane bulduğunuzu (Python veya Ruby) öğrenin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.