Чи функціональне програмування сильно пов'язане з математикою?


21

Чи функціональне програмування так пов'язане з математикою, оскільки значна частина функціонального програмування зображена математичними поняттями? Чи ОБОВ'ЯЗКОВО мати потужну базу математики для вивчення та розуміння функціонального програмування для програміста з необхідним досвідом?


1
Це питання правильно позначене математикою чи це має бути математика?

Ось і ось два дуже схожих питання. Я не думаю, що вам потрібно мати «міцну базу» в математиці, але вам потрібно досить добре розуміти його принципи з певної точки зору. Геометрія мені найбільше допомагає з картографуванням пам’яті, але я вже рідко думаю про такі числа як такі. Математика (може бути) ДУЖЕ корисна, хоча.
Гарет Клаборн

Відповіді:


28

Все програмування пов'язане з математикою. Дійсно, багато університетів все ще розміщують свої програми з інформатики під компетенцією кафедри математики.

Що стосується вивчення функціонального програмування, то вам не потрібно мати міцну базу в математиці, щоб засвоїти його. Зараз я вивчив три різні функціональні мови з розумним володінням (Haskell, Erlang, Clojure), а мої власні математичні навички надзвичайно слабкі. Спільнота Haskell дійсно може трохи роздратувати його орієнтований на математику спосіб говорити про речі, але обидва Erlang і Clojure - це дуже прагматичні функціональні мови програмування, які не так складно підібрати, оскільки інформація про підручник написана, здавалося б, для програмістів, а не важких математичних вундеркіндів. Це було сказано, незважаючи на мій гандикап з математики, я все- таки взяв Хаскелл, тому це не неможливо.

Справжня складність, яку я виявив у підборі декларативних мов програмування загалом (з яких функціонал є підмножиною), - це відмова від того, що прагнути контролювати; сказати комп’ютеру, що робити. Це потребує певного звикання.


Приємні слова, +1.
Мудассір

4
коли ти навчишся добре вивчати SQL, декларативне програмування не так складно.

7

Так. По суті, функціональна програма - це купа таких тверджень:

// 1_ і 2_ є "фіктивними аргументами" f (1_): = sin (1_) g (1_, 2_): = 1_ + 2_ тощо ...

x = f ()

y = g (x)

z = h (x, h2 (y))

тощо ...

Ви пишете, що програма повинна робити у вигляді рівнянь, визначаючи нові значення (примітка: не змінні) як функції попередньо визначених значень. Ви також визначаєте функції як відношення. Це дійсно досить схоже на те, як написані математичні теореми.


Я можу зрозуміти математичні функції краще, ніж дивний синакс haskell та інші. Чи є у вас посилання, яке стосується математичних кроків до синтаксису будь-якої функціональної мови.
RainDoctor

Ця відповідь точна. FP почне мати ідеальний сенс, як тільки ви зрозумієте (і інтерналізуєте), що ви пишете математичні функції, а не покрокові процедури. Більшість людей спочатку вивчають процедурне програмування, і багаж є масовим. Я думаю, що "функції" в процедурних мовах слід називати "процедурами".
Какаджі

2

IMO Mathematica, як приклад мови, на якій можна використовувати функціональне програмування, не потребує сильного досвіду математики. Насправді, я не думаю, що я стикався з чимось на зразок функціонального програмування під час своєї базової математичної освіти. Я почав програмування Mathematica робити C-стиль, а функціональне програмування відкрив лише через роки. Я не думаю , що основні функціональні конструкції програмування , такі як Map, Apply, NestListі т.д. вимагають математики фону на всіх.


1

не зовсім. функціональне програмування - це лише методологія, але воно мало свою основу в обчисленні лямбда та подібних подібних даних.

Закриття - це (невелика) спроба впровадження функціональних концепцій програмування в процедурні мови. замість цього for(int i =0 ; i < num; i++) doStuff(arr[i]);, ви можете замість цього припустити, що елементи масиву по суті можуть мати так "зроблено їм"arr.each do |el| doStuff(el) end


10
Ви представляєте лише анонімну функцію, а не закриття. 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

Коротка відповідь: Так, тому що все з певним ступенем формалізації (наприклад, мови програмування) сильно пов'язане з математикою, для різного ступеня математики.

Але використання мови програмування не вимагає чіткого ознайомлення з математикою, наприклад, теоретичними основами мов. Вам не потрібно знати, що таке контекстна вільна мова та які закони та властивості має така мова, щоб її використовувати. Так само не потрібно бути німецькою чи романісткою, щоб говорити німецькою чи французькою мовами.

Позначення "математичні" не є загальною властивістю функціональних мов. Scala та всі мови на основі Lisp мають дуже різні синтаксиси порівняно з Haskell.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.