Cel: Poznanie podstaw rachunku lambda (Lambda Calculus) oraz jego implementacji w języku Python w postaci funkcji anonimowych.
Funkcja lambda to skrócona forma zapisu funkcji, która nie posiada nazwy (jest anonimowa). W Pythonie tworzymy ją za pomocą słowa kluczowego lambda.
# lambda parametry: wyrażenie
kwadrat = lambda x: x * xJest to równoważne (z grubsza) z:
def kwadrat(x):
return x * xGłówna różnica:
- Tylko jedno wyrażenie: Ciało lambdy musi składać się z pojedynczego wyrażenia. Nie może zawierać instrukcji złożonych (
if,for,print), chyba że są to wyrażenia (np.x if condition else y). - Automatyczny return: Wynik wyrażenia jest automatycznie zwracany.
Lambda rachunek to system formalny w logice matematycznej, służący do badania definicji funkcji, ich zastosowania i rekurencji. Został wprowadzony przez Alonzo Churcha w latach 30. XX wieku.
Jest to najmniejszy uniwersalny język programowania. Każdy obliczalny algorytm można wyrazić w rachunku lambda (Równoważność Turinga).
Podstawowe operacje:
-
Abstrakcja lambda definition funkcji):
$(\lambda x. M)$ - Oznacza funkcję przyjmującą argument
$x$ i zwracającą wynik$M$ . - W Pythonie:
lambda x: M
-
Aplikacja (wywołanie funkcji):
$(M N)$ - Oznacza zastosowanie funkcji
$M$ do argumentu$N$ . - W Pythonie:
M(N)
- Lambda rachunek:
$\lambda x. x$ - Python:
lambda x: x
- Lambda rachunek:
$\lambda x. y$ - Python:
lambda x: y(zwracayniezależnie odx)
- Funkcje anonimowe: W rachunku lambda funkcje nie mają nazw. Są tylko definicjami.
- Funkcje wyższego rzędu: Funkcje mogą przyjmować inne funkcje jako argumenty i zwracać funkcje jako wynik.
- Domknięcia (Closures): Funkcje mogą "pamiętać" zmienne ze swojego otoczenia.
Chociaż Python nie jest czysto funkcyjnym językiem (jak Haskell), czerpie z niego wiele inspiracji.
# Funkcja wyższego rzędu
def aplikuj(funkcja, wsad):
return funkcja(wsad)
wynik = aplikuj(lambda x: x + 1, 10)
print(wynik) # 11examples/lambda_playground.py– kompozycja funkcji, pipeline transformacji i praca na listach danych.
Uruchomienie:
python 03-lambda-calculus/examples/lambda_playground.pyPliki zadań:
pytest 03-lambda-calculus/exercises/test_solutions.py -vzastosuj(f, x)– aplikacja funkcji do argumentu.stworz_mnoznik(n)– domknięcie z lambdą.kompozycja(f, g)– składanie funkcjif(g(x)).curry_add(x)– podstawy currying.mapuj_i_filtruj(...)– łączenie mapowania i filtrowania.
- "Introduction to Lambda Calculus" (H. P. Barendregt) - klasyk.
- "SICP (Structure and Interpretation of Computer Programs)" - rozdział o funkcyjnym podejściu.
- "Type Theory and Functional Programming" (Simon Thompson).
