Metody realizacji języków programowania/MRJP Wykład 12: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Salwicki (dyskusja | edycje)
Nie podano opisu zmian
 
Ben (dyskusja | edycje)
Nie podano opisu zmian
Linia 1: Linia 1:
TU COś
= Implementacja języków funkcyjnych =
 
== Specyficzne cechy języków funkcyjnych ==
 
Języki funkcyjne posiadają pewne specyficzne cechy, które sprawiają, że metody ich implementacji różnią się znacząco od języków imperatywnych.
 
'''Funkcje są pełnoprawnymi obywatelami''' ''(ang. first-class citizens)'':
 
1. Mogą być argumentami funkcji
 
2. Mogą być wynikami funkcji
 
3. Mogą być częściowo aplikowane
 
4. Mogą być tworzone anonimowo
 
Spójrzmy na prosty przykład ilustrujący te cechy:
 
  map :: (a->b) -> [a] -> [b]
  map f [] = []
  map f (x:xs) = (f x):(map f xs)
 
  increaseAll :: [Int] -> [Int]
  increaseAll = map (\x->x+1)
 
 
Funkcja map bierze jako argumenty funkcję typu (a->b) i listę elementów typu a, dając w wyniku listę elementów typu b. Zauważmy jednak, że typ funkcji map można odczytać inaczej: argumentem jest funkcja typu (a->b), zaś wynikiem...funkcja typu [a]->[b]

Wersja z 10:40, 21 sie 2006

Implementacja języków funkcyjnych

Specyficzne cechy języków funkcyjnych

Języki funkcyjne posiadają pewne specyficzne cechy, które sprawiają, że metody ich implementacji różnią się znacząco od języków imperatywnych.

Funkcje są pełnoprawnymi obywatelami (ang. first-class citizens):

1. Mogą być argumentami funkcji

2. Mogą być wynikami funkcji

3. Mogą być częściowo aplikowane

4. Mogą być tworzone anonimowo

Spójrzmy na prosty przykład ilustrujący te cechy:

 map :: (a->b) -> [a] -> [b]
 map f [] = []
 map f (x:xs) = (f x):(map f xs)
 
 increaseAll :: [Int] -> [Int]
 increaseAll = map (\x->x+1)


Funkcja map bierze jako argumenty funkcję typu (a->b) i listę elementów typu a, dając w wyniku listę elementów typu b. Zauważmy jednak, że typ funkcji map można odczytać inaczej: argumentem jest funkcja typu (a->b), zaś wynikiem...funkcja typu [a]->[b]