Fonksiyonel programlama matematikle güçlü bir şekilde ilişkili mi?


21

Fonksiyonel programlama matematiğe çok benziyor mu, çünkü fonksiyonel programlamanın çoğu matematiksel kavramlarla tasvir ediliyor mu? Zorunlu altyapıya sahip bir programcı için fonksiyonel programlamayı öğrenmek ve anlamak için güçlü bir matematik tabanına sahip olmak şart mı?


1
Bu soru mathematica ile doğru etiketlenmiş mi yoksa matematik mi olmalı?

Burada ve burada iki benzer soru var. Matematikte 'güçlü bir tabana' sahip olmanız gerektiğini düşünmüyorum , ancak prensipleri bir açıdan oldukça iyi anlamanız gerekiyor. Geometri, bellek haritalamasında bana en çok yardımcı oluyor, ancak sayıları artık nadiren böyle düşünüyorum. Matematik olsa da (olabilir) ÇOK yararlı.
Garet Claborn

Yanıtlar:


28

Tüm programlama matematikle ilgilidir. Gerçekten de birçok üniversite bilgisayar bilimleri programlarını hala matematik bölümünün gözetimine yerleştirmektedir.

Fonksiyonel programlamayı öğrenmeye gelince, onu öğrenmek için matematikte güçlü bir tabana sahip olmanız gerekmez. Makul yeterlilik için üç farklı fonksiyonel dil öğrendim (Haskell, Erlang, Clojure) ve kendi matematik becerilerim son derece zayıf. Haskell'in topluluğu, aslında matematik odaklı şeyler hakkında biraz sinir bozucu olabilir, ancak Erlang ve Clojure her ikisi de öğretici bilgiler yazıldığı için görünüşte zor olduğu için çok pragmatik fonksiyonel programlama dilleri. sert çekirdek matematik meraklıları değil, programcılar için. Varlık dedi ki, matematik benim engeline rağmen ben yaptım imkansız değil bu yüzden, Haskell pick up.

Genel olarak bildirimsel programlama dillerini (işlevsel bir alt kümedir) almakta bulduğum gerçek zorluk, kontrol altında olma dürtüsünü bırakıyor; bilgisayara ne yapacağını söylemek için. Alışmak biraz zaman alıyor.


Güzel sözler, +1.
Mudassir

4
iyi SQL öğrenmek için olsun bildirim programlama çok zor değil.

7

Evet. Temel olarak, fonksiyonel bir program şöyle bir deyimdir:

// 1_ ve 2_ "kukla argümanlar" f (1_): = sin (1_) g (1_, 2_): = 1_ + 2_ vb ...

x = f ()

y = g (x)

z = h (x, h2 (y))

vb...

Programın ne yapması gerektiğini yeni değerleri (not: değişkenleri değil) önceden tanımlanmış değerlerin işlevleri olarak tanımlayan bir denklem şeklinde yazıyorsunuz. Ayrıca işlevleri ilişki olarak tanımlarsınız. Matematiksel teoremlerin yazılma şekline oldukça benzer.


Matematiksel fonksiyonları, haskell ve diğerlerinin tuhaf sözdiziminden daha iyi anlayabiliyorum. Matematik adımlarını herhangi bir işlevsel dilin sözdizimiyle ilişkilendiren herhangi bir bağlantınız var mı?
RainDoctor

Bu cevap kesindir. Adım adım prosedürler değil, matematiksel fonksiyonlar yazdığınızı fark ettiğinizde (ve içselleştirdiğinizde) FP mükemmel bir anlam kazanmaya başlayacaktır. Çoğu insan önce prosedürel programlamayı öğrenir ve bu bagaj çok büyüktür. Prosedür dillerindeki "işlevler", "prosedürler" olarak adlandırılmalıdır.
Kakaji

2

IMO Mathematica, işlevsel programlamayı kullanabileceğiniz bir dile örnek olarak, matematikte güçlü bir arka plan gerektirmez. Aslında, temel matematik eğitimim sırasında fonksiyonel programlama gibi bir şeyle karşılaştığımı sanmıyorum. Mathematica programlamaya C stili yaparak başladım ve sadece yıllar sonra fonksiyonel programlamayı keşfettim. Ben temel fonksiyonel programlama yapıları gibi düşünmüyorum Map, Apply, NestListvb hiç bir matematik arka plan gerektirir.


1

pek sayılmaz. fonksiyonel programlama sadece bir metodolojidir, ancak temelini lambda hesabı ve benzeri şeyler vardı.

Kapanışlar, işlevsel programlama kavramlarını prosedür dillerine tanıtmaya yönelik (küçük) bir girişimdir. Bunun for(int i =0 ; i < num; i++) doStuff(arr[i]);yerine, dizinin öğelerinin doğal olarak "kendilerine bir şeyler" yapabileceğini varsayabilirsiniz.arr.each do |el| doStuff(el) end


10
Sadece isimsiz bir fonksiyonu örneklersiniz, kapanışı değil. Vikipedi:The term closure is often mistakenly used to mean anonymous function. This is probably because most languages implementing anonymous functions allow them to form closures and programmers are usually introduced to both concepts at the same time. These are, however, distinct concepts. A closure retains a reference to the environment at the time it was created (for example, to the current value of a local variable in the enclosing scope) while a generic anonymous function need not do this.

1

Kısa cevap: Evet, çünkü belli bir formalizasyon derecesine sahip her şey (programlama dilleri gibi), farklı derecelerde matematik için matematikle güçlü bir şekilde ilişkilidir.

Ancak, bir programlama dili kullanmak, matematiğe, örneğin dillerin rotalik temellerine aşina olmayı gerektirmez. Bağlamdan bağımsız bir dilin ne olduğunu ve böyle bir dilin kullanabilmesi için hangi yasaların ve mülkiyetin olduğunu bilmek zorunda değilsiniz. Aynı şekilde, almanca ya da fransızca konuşmak için bir Almancı ya da Romalı olmak zorunda değilsiniz.

"Matematiksel" gösterim, işlevsel dillerin ortak bir özelliği değildir. Scala ve tüm Lisp tabanlı diller Haskell'e kıyasla çok farklı sözdizimlerine sahiptir.

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.