Programowanie funkcyjne
Programowanie funkcyjne (lub programowanie funkcjonalne) – filozofia i metodyka programowania będąca odmianą programowania deklaratywnego , w której funkcje należą do wartości podstawowych, a nacisk kładzie się na wartościowanie (często rekurencyjnych ) funkcji, a nie na wykonywanie poleceń.
W czystym programowaniu funkcyjnym, raz zdefiniowana funkcja zwraca zawsze tę samą wartość dla danych wartości argumentów, tak jak prawdziwe funkcje matematyczne.
Spis treści |
[ edytuj ] Historia
Podstawą teoretyczną programowania funkcyjnego jest opracowany w latach 30. XX wieku przez Alonzo Churcha rachunek lambda , a dokładnie rachunek lambda z typami .
Pierwszym funkcyjnym językiem programowania był Information Processing Language (IPL) opracowany przez Allena Newella, Cliffa Shawa i Herberta Simona w połowie lat 50. XX wieku dla maszyny JOHNNIAC. Jednakże przełom dla programowania funkcyjnego stanowiło opracowanie przez Johna McCarthy pod koniec lat pięćdziesiątych języka LISP dla maszyn IBM 700/7000. LISP wprowadził wiele cech spotykanych we współczesnych językach programowania. Opracowany w latach 70. język Scheme miał za zadanie uproszczenie i poprawienie języka LISP .
W latach 70. powstały dwa kolejne funkcyjne języki programowania: język ML opracowany przez Robina Milnera na Uniwersytecie w Edynburgu oraz język Miranda opracowany przez Davida Turnera na Uniwersytecie w Kent. Język ML dał początek kilku dialektom, z których najpopularniejsze obecnie to Objective Caml oraz Standard ML . Pod koniec lat 80. został opracowany i ustandaryzowany język programowania Haskell , wywodzący się z języka Miranda.
Jednym z najnowszych języków funkcyjnych jest rozwijany przez firmę Microsoft język F# . Jest to przeniesienie języka Objective Caml na platformę .NET .
[ edytuj ] Podział języków funkcyjnych
Języki funkcyjne można podzielić na dwie grupy:
[ edytuj ] Języki czysto funkcyjne
Do tej grupy należą języki, w których nie występują zmienne ani efekty uboczne , a wartościowanie jest leniwe .
Wejście/wyjście w takich językach musi się odbywać jakimś alternatywnym mechanizmem, np. za pomocą monad .
Przedstawiciele tej podgrupy to Haskell oraz Clean .
[ edytuj ] Języki mieszane
Języki tej grupy są popularniejsze niż języki czysto funkcyjne. Umożliwiają one stosowanie zmiennych, pozwalają na efekty uboczne, tradycyjne wejście/wyjście i mieszanie stylu funkcyjnego z imperatywnym bądź obiektowym . Wartościowanie w nich jest przeważnie zachłanne .
Do grupy tej należą Lisp z wszystkimi pochodnymi (np. Clojure , Scheme ), Erlang , Scala , języki grupy ML ( Standard ML , OCaml , więc i bazujący na nim F# , tworzony przez polskich studentów język Nemerle , a także języki, w których elementy funkcyjne nie są aż tak ważne, jak Python , Ruby , a nawet do pewnego stopnia Perl , JavaScript , D .
[ edytuj ] Linki zewnętrzne
Strony w języku polskim:
- Programowanie funkcyjne (materiały dydaktyczne Uniwersytetu Warszawskiego na studia informatyczne II stopnia)
- Strona prostego funkcyjnego języka programowania
Strony w języku angielskim:
Home Page , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

