Programowanie

Programowanie funkcyjne

Programowanie funkcyjne

Programowanie funkcyjne (lub programowanie funkcjonalne) - filozofia 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 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.

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# 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# Microsoftu, 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.

[edytuj] Linki zewnętrzne

Strony w języku polskim:

Strony w języku angielskim: