Programowanie czysto funkcjonalne - Purely functional programming

W informatyce , czysto funkcjonalny programowania zazwyczaj oznacza programowania paradygmatu -a styl budowania struktury i elementów komputerowych programów, które traktuje wszystkich obliczeń jako oceny funkcji matematycznych . Programowanie czysto funkcjonalne można również zdefiniować, zabraniając zmian stanu i zmiennych danych.

Programowanie czysto funkcjonalne polega na zapewnieniu, że funkcje wewnątrz paradygmatu funkcjonalnego będą zależeć tylko od ich argumentów, niezależnie od jakiegokolwiek stanu globalnego lub lokalnego.

Różnica między czystym a nieczystym programowaniem funkcjonalnym

Dokładna różnica między czystym a nieczystym programowaniem funkcjonalnym jest przedmiotem kontrowersji.

Program jest zwykle określany jako funkcjonalny, gdy używa pewnych koncepcji programowania funkcjonalnego , takich jak funkcje pierwszej klasy i funkcje wyższego rzędu . Jednak funkcja pierwszej klasy nie musi być czysto funkcjonalna, ponieważ może wykorzystywać techniki z paradygmatu imperatywnego , takie jak tablice lub metody wejścia/wyjścia , które nie są programami czysto funkcjonalnymi. W rzeczywistości, najwcześniejsze języki programowania cytowane jako funkcjonalne, IPL i Lisp , były według obecnej definicji „nieczystymi” językami funkcjonalnymi.

Czysto funkcjonalne struktury danychtrwałe . Trwałość jest wymagana do programowania funkcjonalnego; bez tego te same obliczenia mogłyby zwrócić różne wyniki. Programowanie funkcjonalne może wykorzystywać trwałe, nie czysto funkcjonalne struktury danych , podczas gdy te struktury danych nie mogą być używane w programach czysto funkcjonalnych.

Właściwości programowania czysto funkcjonalnego

Ocena ścisła kontra nieścisła

Każda strategia ewaluacji, która kończy się na czysto funkcjonalnym programie, daje ten sam wynik. W szczególności zapewnia to, że programista nie musi zastanawiać się, w jakiej kolejności programy są oceniane, ponieważ gorliwa ocena zwróci ten sam wynik, co leniwa ocena . Jednak nadal jest możliwe, że gorliwa ocena nie może się zakończyć, podczas gdy leniwa ocena tego samego programu zostanie zatrzymana. Zaletą tego jest to, że leniwa ocena może być znacznie łatwiej zaimplementowana; ponieważ wszystkie wyrażenia zwrócą ten sam wynik w dowolnym momencie (niezależnie od stanu programu), ich ocenę można opóźnić tak bardzo, jak to konieczne.

Równoległe obliczenia

Programowanie czysto funkcjonalne upraszcza obliczenia równoległe, ponieważ dwie czysto funkcjonalne części oceny nigdy nie wchodzą w interakcje.

Struktury danych

Struktury danych czysto funkcjonalne są często reprezentowane w inny sposób niż ich imperatywne odpowiedniki. Na przykład tablica z dostępem i aktualizacją w czasie stałym jest podstawowym składnikiem większości języków imperatywnych, a wiele imperatywnych struktur danych, takich jak tablica mieszająca i sterta binarna , opiera się na tablicach. Tablice można zastąpić mapą lub listą losowego dostępu , która dopuszcza implementację czysto funkcjonalną, ale czas dostępu i aktualizacji jest logarytmiczny . Dlatego czysto funkcjonalne struktury danych mogą być używane w językach, które nie są funkcjonalne, ale mogą nie być najbardziej wydajnym dostępnym narzędziem, zwłaszcza jeśli nie jest wymagana trwałość.

Ogólnie rzecz biorąc, konwersja programu imperatywnego do programu czysto funkcjonalnego wymaga również upewnienia się, że poprzednio modyfikowalne struktury są teraz jawnie zwracane przez funkcje, które je aktualizują, struktura programu nazywana stylem przekazywania przez sklep .

Język czysto funkcjonalny

Język czysto funkcjonalny to język, który dopuszcza jedynie programowanie czysto funkcjonalne. Programy czysto funkcjonalne można jednak pisać w językach, które nie są czysto funkcjonalne.

Bibliografia