Czy programowanie funkcjonalne jest ściśle związane z matematyką?


21

Czy programowanie funkcjonalne jest tak związane z matematyką, ponieważ większość programowania funkcjonalnego jest przedstawiona za pomocą pojęć matematycznych? Czy MUSISZ mieć silną bazę matematyki, aby uczyć się i rozumieć programowanie funkcjonalne dla programisty z niezbędnym doświadczeniem?


1
Czy to pytanie jest poprawnie oznaczone matematyką, czy powinno to być matematyka?

Tu i tutaj są dwa bardzo podobne pytania. Nie sądzę, że musisz mieć „silną bazę” w matematyce, ale z jakiegoś punktu widzenia potrzebujesz dość dobrego zrozumienia jej zasad. Geometria najbardziej pomaga mi w mapowaniu pamięci, ale rzadko myślę o liczbach jako takich. Matematyka jest (może być) BARDZO użyteczna.
Garet Claborn

Odpowiedzi:


28

Całe programowanie związane jest z matematyką. Rzeczywiście wiele uniwersytetów nadal poddaje swoje programy informatyczne pod kierunkiem działu matematyki.

Jeśli chodzi o naukę programowania funkcjonalnego, nie trzeba mieć silnej podstawy matematyki, aby się go nauczyć. Nauczyłem się teraz trzech różnych języków funkcjonalnych do rozsądnej biegłości (Haskell, Erlang, Clojure), a moje umiejętności matematyczne są bardzo słabe. Społeczność Haskell może rzeczywiście być trochę irytująca w mowie matematyki, ale zarówno Erlang, jak i Clojure są bardzo pragmatycznymi funkcjonalnymi językami programowania, które nie są tak trudne do odczytania, ponieważ informacje z samouczka są napisane pozornie, dla programistów, a nie zapalonych maniaków matematyki. W takiej sytuacji, pomimo mojej niepełnosprawności w matematyce ja zrobiłem podnieść Haskell, więc nie jest to niemożliwe.

Prawdziwą trudnością, jaką napotkałem przy zbieraniu deklaratywnych języków programowania (których funkcjonalność jest podzbiorem), jest rezygnacja z kontroli; powiedzieć komputerowi, co ma robić. To wymaga trochę przyzwyczajenia się.


Ładne słowa, +1.
Mudassir

4
kiedy nauczysz się dobrze SQL, programowanie deklaratywne nie jest takie trudne.

7

Tak. Zasadniczo program funkcjonalny to kilka takich instrukcji:

// 1_ i 2_ są „fałszywymi argumentami” f (1_): = sin (1_) g (1_, 2_): = 1_ + 2_ itd.

x = f ()

y = g (x)

z = h (x, h2 (y))

itp...

Piszesz, co program ma robić w postaci równań definiujących nowe wartości (uwaga: nie zmienne) jako funkcje wcześniej zdefiniowanych wartości. Zdefiniujesz również funkcje jako relacje. Jest to bardzo podobne do sposobu pisania twierdzeń matematycznych.


Potrafię zrozumieć funkcje matematyczne lepiej niż dziwna synatx haskell i innych. Czy masz link, który wiąże kroki matematyczne ze składnią dowolnego języka funkcjonalnego?
RainDoctor,

Ta odpowiedź jest precyzyjna. FP zacznie mieć sens, gdy uświadomisz sobie (i zinternalizujesz), że piszesz funkcje matematyczne, a nie procedury krok po kroku. Większość ludzi najpierw uczy się programowania proceduralnego, a bagaż jest ogromny. Myślę, że „funkcje” w językach proceduralnych należy nazwać „procedurami”.
Kakaji

2

IMO Mathematica, jako przykład języka, w którym można używać programowania funkcjonalnego, nie wymaga silnego zaplecza matematycznego. W rzeczywistości nie sądzę, że podczas mojej podstawowej edukacji matematycznej napotkałem coś takiego jak programowanie funkcjonalne. Rozpocząłem programowanie Mathematica w stylu C, a dopiero kilka lat później odkryłem programowanie funkcjonalne. Nie sądzę, funkcjonalne podstawowe konstrukcje programistyczne podoba Map, Apply, NestListitd wymaga żadnego tła matematyki w ogóle.


1

nie całkiem. programowanie funkcjonalne jest tylko metodologią, ale miało swoją podstawę w rachunku lambda i tym podobnych.

Zamknięcia są (małą) próbą wprowadzenia funkcjonalnych koncepcji programowania do języków proceduralnych. zamiast tego for(int i =0 ; i < num; i++) doStuff(arr[i]);możesz założyć, że elementy tablicy z natury mogą mieć „rzeczy im zrobione”arr.each do |el| doStuff(el) end


10
Jesteś tylko przykładem anonimowej funkcji, a nie zamknięcia. Wikiedpia: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

Krótka odpowiedź brzmi: tak, ponieważ wszystko z pewnym stopniem formalizacji (np. Języki programowania) jest silnie powiązane z matematyką, dla różnych stopni matematyki.

Używanie języka programowania nie wymaga jednak ścisłej znajomości matematyki, na przykład teoretycznych podstaw języków. Nie musisz wiedzieć, czym jest język bezkontekstowy oraz jakie prawa i własności taki język ma, aby go używać. Podobnie nie musisz być germanistą ani romanistą, aby mówić po niemiecku lub francusku.

Notacja „matematyczna” nie jest wspólną własnością języków funkcjonalnych. Scala i wszystkie języki oparte na Lisp mają bardzo różne składnie w porównaniu do Haskell.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.