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


20

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

Довідкова інформація: Я пишу програмне забезпечення вже 12 років. Я розумію деякі поняття, такі як закриття, функціонування як громадян першого класу, так і генерики. У мене можуть бути проблеми з функціями вищого порядку на якомусь просунутому рівні, але я хотів би повірити, що я маю базове розуміння. Монади кусають мене за недопалок, і в цей момент я ще не пройшов цього (я впевнений, що зрештою буду, бо наполегливий).


лише трохи, я не спробував інші 3 запропоновані вами мови
Чарльз Ламберт,

F # найпростіше почати, якщо ви знаєте C #. Не вимагає великих знань з математики.
CND

6
Спробуйте SICP - це не надто виходить за межі математики середньої школи.
SK-логіка

@Charles Lambert - Перейдіть на OfficeSpace і отримаєте другу частину коментаря до роботи.
Jetti

@Charles Lambert: Learn You a Haskell for Great Good не надто матовий: D
Matthieu M.

Відповіді:


21

Вони використовують математику, оскільки функціональне програмування дуже добре моделює математичні конструкції і дуже прив’язане до математичних понять, зокрема обчислення Ламбди. Крім того, оскільки введення / виведення є типово досить тернистим і розвинутим предметом у багатьох мовах функціональної парадигми з математики через REPLs різних мов стає спочатку хорошим способом викладання мови.

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

Імперативні мови настільки ж математичні, але все це арифметично в основі, оскільки вони ближче до машини, яка лише може додавати. Функціональні мови з їх вищою абстракцією більше спрямовані на математику. Загальне використання в наукових закладах не допомагає ні тому, як вони звикають, і таким чином навчають людей, які знають багато математики та навчають людей, які очікують навчитися багато математики. Тож можна так «притупити» так би мовити, але навряд чи з огляду на ці фактори.

http://learnyouahaskell.com/ - Мабуть, одне з наймільніших вступів у функціональне програмування, я двічі перевірив, і там немає нічого, крім базової теорії алгебри та графіків.


learnnyousomeerlang.com - це також варіант, якщо ви хочете ще щось, крім Haskell.
Тревіс

11

Причин багато, і всі вони пов'язані між собою:

  • Більшість функціональних мов програмування були розроблені в академічному контексті, де CS тісно пов'язаний з математикою, тому люди, які їх розробляли, мають сильний математичний досвід (і, як правило, вважають те ж саме про свою аудиторію)
  • Функціональне програмування - парадигма, яка особливо підходить для вирішення математично важких задач
  • Теорія, що стоїть за FP, обчислення лямбда (в основному, абстрактна теорія функцій), є галуззю математики, і мови FP, як правило, використовують поняття та термінологію з лямбда-числення.

Крім того, ПП насправді не є більш математичним, ніж інші парадигми, але ключові поняття (функції як справжні громадяни першого класу, функції вищого порядку, закриття та чистота) вимагають певного мислення. У якийсь момент ваш розум повинен піти «клацати»; якщо ви розумієте ці 4 основні ідеї, решта, ймовірно, буде так само легкою, як і будь-яка інша парадигма.


3
+1 для розроблених в наукових колах: люди, що створюють функціональні мови, базують його на математичних властивостях, тому він протікає ...
Матьє М.

@Matthieu M: Базування мови програмування на математичних властивостях допомагає писати правильне програмне забезпечення та скорочує час розробки. Наприклад, я точно витрачаю менше часу на відлагодження свого коду Haskell, ніж мій код C ++. Скорочення часу на розробку (і витрати) - це величезна практична перевага, яка може виправдати зусилля щодо вивчення певної математики. Як зазначають тадмері, є кілька додаткових концепцій, які потрібно вивчити, але після того, як ви зрозуміли кілька основних ідей, FP настільки інтуїтивно зрозумілий, як і імперативне програмування.
Джорджіо

Я також погоджуюся з tdammers, що також імперативні мови можна описати, використовуючи математичні поняття. Насправді математичний опис імперативної програми зазвичай набагато складніший, ніж математичний опис функціональної програми. IMO це пояснює, чому імперативні мови частіше містять помилки: важче повністю зрозуміти імперативний код. Принаймні, це мій особистий досвід роботи з декількома роками функціонального програмування та ще багатьма роками імперативного програмування.
Джорджіо

@Giorgio: є різниця між "просоченням мови" (якось) та "просоченням підручника". Я впевнений, що ви можете написати навчальний посібник з функціонального програмування без такої великої математики. Звичайно, краще вони чи ні, це не обговорювати й, мабуть, суб'єктивно.
Матьє М.

@MatthieuM. Дякую вам за роз'яснення того, що ви мали на увазі під течією (витік у підручник): ваш коментар має для мене набагато більше сенсу. Я згоден з вами, що підручник з ПС повинен містити якомога менше математики. Я якось неправильно трактував ваш коментар: Працюючи і в галузі, і в академіях, я трохи чутливий до того, що "в академіях вони роблять багато математики, яка марна в реальному світі". +1 як для вашого коментаря, так і для відповіді tdammer.
Джорджіо

5

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

Це важко навчитися, якщо ти не звик думати, що комп'ютерне програмування має математичну основу.


4
Принципово обчислювальна техніка - це поєднання логіки та арифметики. Це не математика. Ви не можете висловити інструкцію з гілки в математичній формулі - тому вона не може базуватися на математиці. Натовп функціонального програмування хотів би, щоб він базувався на математиці, щоб вони розробляли мови програм, які ведуть себе так, як ніби інструкцій з галузей не існувало.
Джеймс Андерсон

9
@James Anderson, ви кажете, що логіка та арифметика - це не математика? І я бачив тонни математичних формул, які містять вказівки щодо галузей (як правило, виражені формалізмом, що нагадує переключення).
Пітер Тейлор

4
Арифметична підмножина математики, яка займається простим обчисленням. Логіка - це набір математики, який є основою всієї раціональної думки. Між іншим, функціональне програмування - це дуже гарна ідея для вирішення завдань, які можна виразити математично; це не так жарко, коли ви намагаєтеся дотримуватися нелогічного безладу довільних правил, таких як GAP (Загальноприйняті практики бухгалтерського обліку)
Джеймс Андерсон,

6
@ ian31, як би ви визначили слово " фундаментально "? Ви знаєте, цивільне будівництво базується також на фізиці та математиці, тоді як практично все стосується побудови матеріалів, якими люди можуть користуватися та насолоджуватися. І будь-яким способом, перш ніж починати думати про програмування рішення якоїсь проблеми в реальному світі, ви повинні перевести цю проблему в якийсь математичний формалізм. Це просто не буде працювати в інший спосіб. Програмування стосується формалізмів.
SK-логіка

6
@ ian31, мови програмування - це формалізми. Їх поведінка суворо визначена та передбачувана. Таким чином, кодування будь-якої конкретної моделі (навіть якщо вона розпливчаста) перетворює її на своєрідний формалізм. Математика добре розміщується на цій неясній області, незважаючи на загальне уявлення про те, що вона обмежена блискучим кришталево-чистим світом чітко визначених суворих моделей.
SK-логіка

1

Я думаю, що "Маленький схемер" - це дивовижне введення у функціональне програмування і зовсім не є математичним. Він не потрапляє в Monads, тому це може бути занадто базовим для ваших смаків, але все-таки виводить Y-комбінатор до кінця.

Нещодавно я пройшов це через те, що не займався жодним функціональним програмуванням з коледжу 12 років тому, і це було чудовим оновленням, я, безумовно, відчуваю готовність вирішувати більш вдосконалені речі, працюючи над більшістю проблем у книзі за допомогою Racket.

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