Programowanie funkcyjne

Z Wikipedii, wolnej encyklopedii
Przejdź do nawigacji Przejdź do wyszukiwania

Programowanie funkcyjne – filozofia i metodyka programowania będąca odmianą programowania deklaratywnego, w której wykorzystuje się to, że funkcje należą do typów pierwszoklasowych. Kładzie nacisk się na obliczanie wartości funkcji (często rekurencyjnych), ich kompozycje oraz funkcje wyższego rzędu.

W językach programowania typ pierwszoklasowy (ang. first-class type), jak również obiekt pierwszoklasowy (ang. first-class object) czy ogólniej jednostka pierwszej kategorii (ang. first-class citizen) jest konstruktem służącym do przechowywania danych, na którym możemy wykonywać takie same operacje, jak na danych innych, wbudowanych typów, takich jak np. liczby czy ciągi znaków. O’Reilly Media (poprzednio O’Reilly & Associates) – amerykańska kompania mediowa założona przez Tima O’Reilly, wydająca książki i internetowe serwisy oraz organizująca konferencje związane z komputerami.

W czystym programowaniu funkcyjnym, raz zdefiniowana funkcja zwraca zawsze tę samą wartość dla określonych wartości argumentów, tak jak funkcje matematyczne. Duży nacisk kładzie się także na niezmienność danych.

Historia[ | edytuj kod]

Podstawą teoretyczną programowania funkcyjnego jest rachunek lambda (a dokładnie rachunek lambda z typami). Został on opracowany w w latach 30. XX wieku przez Alonzo Churcha.

Rachunek lambda z typami to postać rachunku lambda rozszerzona o typy i z ograniczeniami, jakie wyrażenia są dozwolone, zależnie od ich typów.OCaml znany pierwotnie jako Objective Caml to wielo-paradagmatowy język programowania oraz implementacja tego języka w postaci zestawu narzędzi i bibliotek.

Nazwa paradygmatu po raz pierwszy pojawiła się w pracy Johna Backusa „Can Programming Be Liberated From the von Neumann Style? A Functional Style and Its Algebra of Programs” w roku 1977, dzięki której Backus dostał nagrodę Turinga, mimo że programowanie funkcyjne było znane już wcześniej.

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.

Rekurencja, zwana także rekursją (ang. recursion, z łac. recurrere, przybiec z powrotem) to w logice, programowaniu i w matematyce odwoływanie się np. funkcji lub definicji do samej siebie.Programowanie komputerów to proces projektowania, tworzenia, testowania i utrzymywania kodu źródłowego programów komputerowych lub urządzeń mikroprocesorowych (mikrokontrolery). Kod źródłowy jest napisany w języku programowania, z użyciem określonych reguł, może on być modyfikacją istniejącego programu lub czymś zupełnie nowym. Programowanie wymaga dużej wiedzy i doświadczenia w wielu różnych dziedzinach, jak projektowanie aplikacji, algorytmika, struktury danych, znajomość języków programowania i narzędzi programistycznych, wiedza nt. kompilatorów, czy sposób działania podzespołów komputera. W inżynierii oprogramowania, programowanie (implementacja) jest tylko jednym z etapów powstawania programu.

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.

IPL (Information Processing Language) - język programowania opracowany w latach 1954 - 1956 przez zespół w składzie: A. Newell, C. Shaw i H. Simon. Język ten przeznaczony był do przetwarzania operacji symbolicznych. Konstruowano w tym języku m.in. programy dowodzące twierdzenia i gry w szachy.Funkcja wyższego rzędu (ang. higher-order function) - w informatyce jest to funkcja, która zwraca lub przyjmuje jako argument inne funkcje. Tego rodzaju funkcje są powszechnie stosowane w językach funkcyjnych, jak SML, Ocaml, Haskell, jak również w Pythonie i Javascripcie. Aby można było tworzyć funkcje wyższego rzędu, funkcje muszą być typem pierwszoklasowym.

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.

Podstrony: 1 [2] [3] [4]




Warto wiedzieć że... beta

Rachunek lambda – system formalny używany do badania zagadnień związanych z podstawami matematyki jak rekurencja, definiowalność funkcji, obliczalność, podstawy matematyki np. definicja liczb naturalnych, wartości logicznych itd. Rachunek lambda został wprowadzony przez Alonzo Churcha i Stephena Cole’a Kleene’ego w 1930 roku.
.NET Framework, w skrócie .NET (wym. dot net) – platforma programistyczna opracowana przez Microsoft, obejmująca środowisko uruchomieniowe (Common Language Runtime – CLR) oraz biblioteki klas dostarczające standardowej funkcjonalności dla aplikacji. Technologia ta nie jest związana z żadnym konkretnym językiem programowania, a programy mogą być pisane w jednym z wielu języków – na przykład C++/CLI, C#, F#, J#, Delphi 8 dla .NET, Visual Basic .NET. Zadaniem platformy .NET Framework jest zarządzanie różnymi elementami systemu: kodem aplikacji, pamięcią i zabezpieczeniami. W środowisku tym można tworzyć oprogramowanie działające po stronie serwera internetowego (IIS) oraz pracujące na systemach, na które istnieje działająca implementacja tej platformy. Z racji jej pochodzenia najpełniej obsługiwane są systemy z rodziny Microsoft Windows, jednak ponieważ zasadnicza część platformy została zgłoszona jako standard ECMA, powstają także jego niezależne wdrożenia, np. Mono i dotGNU.
Wydział Matematyki, Informatyki i Mechaniki Uniwersytetu Warszawskiego (WMIM UW, MIMUW) – wydział Uniwersytetu Warszawskiego kształcący w trybie dziennym na kierunkach:
Nagroda Turinga — nagroda przyznawana corocznie za wybitne osiągnięcia w dziedzinie informatyki przez Association for Computing Machinery.
Język D – wieloparadygmatowy język programowania umożliwiający programowanie obiektowe, imperatywne oraz metaprogramowanie. Został opracowany przez Waltera Brighta, twórcę pierwszego natywnego kompilatora C++, Zortech C++. D powstał jako obiektowy następca języka C, jednak w przeciwieństwie do C++ zachowuje ze swoim poprzednikiem jedynie binarną kompatybilność. D posiada wiele cech obecnych w C++, a jego składnia oraz możliwości są wzorowane na Javie, C# oraz Eiffel. Pierwsza stabilna wersja języka ukazała się 2 stycznia 2007 roku. 17 czerwca 2007 roku opublikowano po raz pierwszy eksperymentalną wersję 2.0.
Nemerle – hybrydowy język programowania. Zawiera elementy programowania funkcyjnego i obiektowego, jest tworzony przez grupę osób z Instytutu Informatyki Uniwersytetu Wrocławskiego. Nemerle jest językiem opartym na platformie .NET.
Programowanie deklaratywne — rodzina paradygmatów programowania, które nie są z natury imperatywne. W przeciwieństwie do programów napisanych imperatywnie, programista opisuje warunki, jakie musi spełniać końcowe rozwiązanie (co chcemy osiągnąć), a nie szczegółową sekwencję kroków, które do niego prowadzą (jak to zrobić). Programowanie deklaratywne często traktuje programy jako pewne hipotezy wyrażone w logice formalnej, a wykonywanie obliczeń jako ich dowodzenie. Programowanie deklaratywne jest szczególnym przedmiotem zainteresowania naukowców, gdyż dzięki minimalizacji lub eliminacji skutków ubocznych może znacząco uprościć tworzenie programów współbieżnych. Paradygmat programowania deklaratywnego obejmuje szeroką gamę języków programowania i bardziej szczegółowych paradygmatów podrzędnych.

Reklama