neden tüm fonksiyonel programlama dersleri bu kadar mathy?


20

Fonksiyonel programlamayı öğrenmeye çalışıyordum ve bulduğum çoğu öğretici, daha karmaşık yapılara (bazı durumlarda basit olanlar bile) örnek olarak matematik kullanıyorum. Bu neden? Daha kolay bir şeyin kullanılabileceğini düşünürdüm. Öğrenmeyi zorlaştırıyor.

Arka Plan Bilgisi: 12 yıldır yazılım yazıyorum. Kapanışlar, birinci sınıf vatandaş olarak işlevler ve jenerikler gibi bazı kavramları anlıyorum. Bazı ileri düzeyde üst düzey işlevlerle ilgili sorunlar yaşıyor olabilirim, ancak temel bir kavrayışım olduğuna inanmak istiyorum. Monadlar beni popoda ısırıyor ve bu noktada bunu geçemedim (eminim sonunda yapacağım, çünkü ısrarcıyım).


sadece biraz, önerdiğin diğer 3 dili denemedim
Charles Lambert

F #, C # biliyorsanız başlamak için en kolay şeydir. Büyük matematik bilgisi talep etmez.
cnd

6
SICP'yi deneyin - lise matematiğinin çok ötesine geçmez.
SK-logic

@Charles Lambert - Git OfficeSpace'i izlediğinizde Job'un yorumunun ikinci bölümünü alacaksınız.
Jetti

@Charles Lambert: Size İyi Bir Haskell Öğrenin Çok İyi Değil: D
Matthieu M.

Yanıtlar:


21

Matematiği kullanırlar çünkü Fonksiyonel Programlama matematiksel yapıları modellemede çok iyidir ve matematiksel kavramlara, özellikle de Lambda Calculus'a çok bağlıdır. Ayrıca, I / O tipik olarak çeşitli paradigma matematiğinin pek çok dilinde çeşitli dillerin REPL'leri aracılığıyla oldukça dikenli ve gelişmiş bir konu olduğundan, ilk başta dili öğretmenin iyi bir yolu haline gelir.

Fonksiyonel Programlama Fonksiyonları programlama dilinde birinci sınıf yapılar olarak ele aldığından, fonksiyon üretimi çok önemli hale gelir. Bu nedenle yüksek matematik özellikle grafik teorisi açısından oldukça önemlidir.

Zorunlu Diller tıpkı bir mathy gibidir, ancak temelde aritmetiktir, çünkü makineye daha yakındırlar, ancak yine de ekleyebilirler. Yüksek soyutlamaları olan fonksiyonel diller matematiğe daha çok eğilimlidir. Akademide genel kullanım, çok fazla matematik bilen ve çok fazla matematik öğrenmesi beklenen insanlara öğretilen insanlar tarafından kullanıldıkça ve böylece öğretildikçe yardımcı olmaz. Bu yüzden konuşmak için "aptal" etmek mümkündür, ancak bu faktörlerin verilmesi olası değildir.

http://learnyouahaskell.com/ - Muhtemelen Fonksiyonel Programlamaya en nazik girişlerden biridir, iki kez kontrol ettim ve orada temel cebir ve grafik teorisinin ötesinde bir şey yok.


learnyousomeerlang.com , Haskell dışında başka bir şey istiyorsanız da bir seçenektir.
Travis

11

Çok sayıda neden var ve bunların hepsi birbiriyle ilişkili:

  • İşlevsel programlama dillerinin çoğu, CS'nin Matematik ile yakından bağlantılı olduğu akademik bir bağlamda geliştirildi, bu yüzden onları tasarlayan insanlar güçlü bir Matematik geçmişine sahip (ve izleyicileri hakkında aynı şeyi varsayma eğilimindedir)
  • Fonksiyonel programlama özellikle matematik ağırlıklı problemleri çözmek için uygun bir paradigmadır
  • FP'nin arkasındaki teori, lambda hesabı (temel olarak, soyut bir fonksiyonlar teorisi), bir Matematik dalıdır ve FP dilleri lambda hesabından kavramları ve terminolojiyi kullanma eğilimindedir

Ayrıca, FP gerçekten diğer paradigmalardan daha fazla mathy değildir, ancak anahtar kavramlar (gerçek birinci sınıf vatandaşlar olarak işlevler, daha üst düzey işlevler, kapanışlar ve saflık) belirli bir zihniyet gerektirir. Bir noktada, zihniniz "tıklama" ya gitmelidir; Eğer bu 4 temel fikri anlarsanız, geri kalanı diğer paradigmalar kadar kolay olacaktır.


3
Akademik alanda geliştirilen için 1: o kadar işlevsel dilleri yaratan insanlar, matematiksel özellikleri üzerine dayandırmak sızdırıyor ...
Matthieu M.

@Matthieu M: Bir programlama dilini matematiksel özelliklere dayandırmak, doğru yazılım yazmaya ve geliştirme süresini azaltmaya yardımcı olur. Örneğin, kesinlikle Haskell kodumu hata ayıklama C ++ kodumdan daha az zaman harcamak. Geliştirme süresini (ve maliyetleri) azaltmak, bazı matematik öğrenme çabalarını haklı çıkarabilecek büyük bir pratik avantajdır. Tdammers'ın işaret ettiği gibi, öğrenilmesi gereken birkaç ekstra kavram var, ancak birkaç temel fikri anladıktan sonra FP, zorunlu programlama kadar sezgisel.
Giorgio

Aynı zamanda zorunlu dillerin matematiksel kavramlar kullanılarak tanımlanabileceğini de kabul ediyorum. Aslında, zorunlu bir programın matematiksel bir açıklaması normalde işlevsel bir programın matematiksel bir tanımından çok daha karmaşıktır. IMO, zorunlu dillerin neden hata içerme olasılığının daha yüksek olduğunu açıklar: Emir kodunu tam olarak anlamak daha zordur. En azından, bu benim birkaç yıllık fonksiyonel programlama ve daha uzun yıllar zorunlu programlama ile kişisel deneyimim.
Giorgio

@Giorgio: "dile sızıntı" (bir şekilde) ve "öğreticiye sızıntı" arasında bir fark vardır. Onlarda çok fazla matematik olmadan fonksiyonel programlama öğretici yazabileceğinizden eminim. Elbette daha iyi olup olmadıkları tartışmaya açık ve muhtemelen özneldir.
Matthieu M.Mayıs

@MatthieuM .: Sızdırarak (öğreticiye sızarak) ne demek istediğini açıkladığın için çok teşekkürler: Yorumun şimdi benim için çok daha anlamlı. FP ile ilgili bir öğreticinin mümkün olduğunca az matematik içermesi gerektiğini kabul ediyorum. Yorumunuzu bir şekilde yanlış yorumladım: Hem endüstride hem de akademide çalıştıktan sonra, "akademide gerçek dünyada işe yaramaz bir sürü matematik yapıyorlar" yorumlarına biraz fazla duyarlıyım. Yorumunuz ve tdammer'ın yanıtı için +1.
Giorgio

5

Çünkü temelde bilgisayar programlama matematiktir. Fonksiyonel diller bu düşünülerek tasarlandı ve bu yüzden öğreticilerin çoğu matematiğe odaklandı.

Bilgisayar programlamayı matematiksel bir temele sahip olarak düşünmeye alışkın değilseniz öğrenmek zordur.


4
Temel olarak hesaplama, mantık ve aritmetiğin birleşimidir. Bu matematik değil. Bir dal talimatını matematiksel bir formülle ifade edemezsiniz - bu nedenle matematik temel alınamaz. Fonksiyonel programlama kalabalığının matematik temelli olmasını ister, böylece şube talimatları yokmuş gibi davranan program dilleri geliştirirler.
James Anderson

9
@James Anderson, mantık ve aritmetiğin matematik olmadığını mı söylüyorsun? Şube talimatlarını içeren tonlarca matematiksel formül gördüm (genellikle anahtar benzeri bir formalizmde ifade edilir).
Peter Taylor

4
Aritmetik basit hesaplama ile ilgilenen matematik alt kümesi. Mantık, tüm rasyonel düşüncenin temeli olan mateminin bir üst kümesidir. Bu arada fonksiyonel programlama matematiksel olarak ifade edilebilen problemleri çözmek için çok iyi bir fikirdir; GAP (Genellikle Kabul Edilen Muhasebe uygulamaları) gibi keyfi kuralların mantıksız bir karmaşasını takip etmeye çalışırken çok sıcak değil
James Anderson

6
@ ian31, " temel " kelimesini nasıl tanımlarsınız ? Biliyorsunuz, inşaat mühendisliği de fizik ve matematiğe dayanıyor, oysa pratikte her şey insanların kullanması ve eğlenmesi için bir şeyler oluşturmakla ilgili. Ve, daha önce hatta bazı gerçek dünya sorununa bir çözüm programlama hakkında düşünme başlayan herhangi yolla, gereken bazı matematiksel formalitelere sorunu çevirmek. Sadece başka şekilde çalışmaz. Programlama tamamen formalizm ile ilgilidir.
SK-logic

6
ian31 @, programlama dilleri vardır Biçimsel. Davranışları kesin olarak tanımlanmış ve öngörülebilir. Böylece, belirli bir modeli kodlamak (belirsiz olsa bile) onu bir çeşit biçimciliğe dönüştürüyor. Matematik, iyi tanımlanmış katı modellerin parlak kristal berraklığında dünyasıyla sınırlı olmasına rağmen, bu belirsiz alanda iyi ölçeklendirilir.
SK-logic

1

Bence "Küçük Schemer" işlevsel programlamaya harika bir giriş ve hiç de mathy değil. Monad'lara girmez, bu yüzden zevkleriniz için çok temel olabilir, ancak Y-birleştiricisinin sonuna doğru bir türevi yapar.

Geçenlerde 12 yıl önce üniversiteden beri herhangi bir fonksiyonel programlama yapmadım ve harika bir tazeleme yaptım, kesinlikle Racket kullanarak kitaptaki sorunların çoğunu çalıştıktan sonra daha gelişmiş şeylerle başa çıkmaya hazır hissediyorum.

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.