Programowanie funkcyjne
Z Wikipedii
Programowanie funkcyjne to filozofia programowania, w której funkcje należą do wartości podstawowych, a nacisk kładzie się na wartościowanie (często rekursywnych) funkcji, a nie na wykonywanie poleceń.
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.
Pierwszy funkcyjnym jęzkiem 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# przeznaczony dla platformy .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, F# Microsoft'u, języki grupy ML (Standard ML, ocaml), 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.