• Artykuły
  • Forum
  • Ciekawostki
  • Encyklopedia
  • Programowanie funkcyjne

    Przeczytaj także...
    Perl – interpretowany język programowania autorstwa Larry’ego Walla początkowo przeznaczony głównie do pracy z danymi tekstowymi, obecnie używany do wielu innych zastosowań. Wzorowany na takich językach jak C, skryptowe: sed, awk i sh oraz na wielu innych.W programowaniu funkcyjnym, monada jest rodzajem konstruktora abstrakcyjnego typu danych, używanego do wyrażania zmieniających się stanów obliczeń (operacji) zamiast znanych z modelu dziedzinowego zmieniających się stanów danych.
    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.

    Programowanie funkcyjne – 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 funkcje matematyczne.

    OCaml znany pierwotnie jako Objective Caml to wielo-paradagmatowy język programowania oraz implementacja tego języka w postaci zestawu narzędzi i bibliotek.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.

    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.

    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.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.

    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.

    .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:

    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.

    Podział języków funkcyjnych[]

    Języki funkcyjne można podzielić na dwie grupy:

    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.

    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.

    Przedstawiciele tej podgrupy to Haskell oraz Clean.

    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.

    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.Biblioteka Kongresu Stanów Zjednoczonych (ang.: Library of Congress) – największa biblioteka świata. Gromadzi ponad 142 mln różnego rodzaju dokumentów, ponad 29 mln książek, 58 mln rękopisów, 4,8 mln map i atlasów, 12 mln fotografii, 6 mln mikrofilmów, 3,5 mln dokumentów muzycznych, 500.000 filmów; wszystko w ponad 460 językach. 7% zbiorów to dokumenty w językach słowiańskich, w tym największy w USA zbiór polskich książek. Całość zajmuje 856 km półek. Biblioteka dysponuje (w 3 budynkach) 22 czytelniami ogólnymi, 3 wydzielonymi czytelniami dla kongresmenów oraz biblioteką sztuki (John F. Kennedy Center). Zatrudnia 5 tysięcy pracowników. Wyposażona jest w system komputerowy o pojemności 13 mln rekordów oraz w 3000 terminali. Pełni funkcję biblioteki narodowej.

    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.

    JavaScript, JS – skryptowy język programowania, stworzony przez firmę Netscape, najczęściej stosowany na stronach internetowych. Pod koniec lat 90. XX wieku organizacja ECMA wydała na podstawie JavaScriptu standard języka skryptowego o nazwie ECMAScript. Głównym autorem JavaScriptu jest Brendan Eich.Scala − język programowania łączący cechy języków funkcyjnych i obiektowych. Scala działa na Wirtualnej Maszynie Javy, a także na Java Platform, Micro Edition Connected Limited Device Configuration i platformie .NET. Nazwa ma za zadanie podkreślać skalowalność języka, stąd Scala ("scalable language").

    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:

  • Strona z informacjami na temat języka Haskell i jego implementacji
  • Implementacje języka Scheme oraz środowisko programowania DrScheme



  • w oparciu o Wikipedię (licencja GFDL, CC-BY-SA 3.0, autorzy, historia, edycja)

    Warto wiedzieć że... beta

    Wartościowanie leniwe (ang. lazy evaluation, ewaluacja leniwa) - strategia wyznaczania wartości argumentów funkcji tylko wtedy, kiedy są potrzebne (na żądanie).
    Programowanie obiektowe (ang. object-oriented programming) — paradygmat programowania, w którym programy definiuje się za pomocą obiektów — elementów łączących stan (czyli dane, nazywane najczęściej polami) i zachowanie (czyli procedury, tu: metody). Obiektowy program komputerowy wyrażony jest jako zbiór takich obiektów, komunikujących się pomiędzy sobą w celu wykonywania zadań.
    Ruby to interpretowany, w pełni obiektowy i dynamicznie typowany język programowania stworzony w 1995 roku przez Yukihiro Matsumoto (pseudonim Matz). W języku angielskim ruby oznacza rubin.
    Scheme – funkcyjny język programowania, dialekt (wariant) Lispu, który został zaprojektowany na MIT przez Guy L. Steele-a i Geralda Jay Sussmana w latach 70. Jego główną ideą jest minimalizm, co oznacza, że sam język zawiera jedynie podstawowe mechanizmy, a na ich bazie, już z użyciem Scheme, tworzone są bardziej zaawansowane rozwiązania. Scheme nie jest czysto funkcyjnym językiem programowania, co oznacza, że dopuszczalne są efekty uboczne obliczeń. Scheme umożliwia również tworzenie programów w stylu proceduralnym i obiektowym. Jest to język o dynamicznym systemie typów. Zarządzanie pamięcią jest w pełni automatyczne. Scheme był pierwszym dialektem Lispu, który używał zmiennych leksykalnych i pierwszym który wymagał od implementacji optymalizacji wywołań z rekurencją ogonową. Scheme jest ustandaryzowany przez organizację IEEE oraz przez dokumenty Revised Report on the Algorithmic Language Scheme (RnRS), z których najczęściej implementowane są R5RS z 1998 roku oraz R6RS z 2007 roku.
    Wartościowanie zachłanne, wartościowanie gorliwe (ang. eager evaluation) to strategia wyznaczania wartości argumentów funkcji przed jej wywołaniem.
    F# – język programowania łączący w sobie cechy "klasycznego" języka imperatywnego oraz języka funkcyjnego. Jest on częścią platformy .NET firmy Microsoft.
    Standard ML (SML) - język programowania funkcyjnego powstały w 1990 roku jako pierwszy standard języka ML (ang. Meta Language). Twórcami SML-a byli Robin Milner, Mads Tofte i Robert Harper.

    Reklama

    Czas generowania strony: 0.033 sek.