Skip to content

Latest commit

 

History

History
126 lines (84 loc) · 3.89 KB

File metadata and controls

126 lines (84 loc) · 3.89 KB

Rachunek lambda i funkcje lambda w Pythonie

Cel: Poznanie podstaw rachunku lambda (Lambda Calculus) oraz jego implementacji w języku Python w postaci funkcji anonimowych.


1. Czym są funkcje lambda (anonimowe)?

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.

Składnia

# lambda parametry: wyrażenie
kwadrat = lambda x: x * x

Struktura funkcji lambda

Jest to równoważne (z grubsza) z:

def kwadrat(x):
    return x * x

Głó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.

2. Podstawy rachunku lambda (Lambda Calculus)

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:

  1. Abstrakcja lambda definition funkcji):

    • $(\lambda x. M)$
    • Oznacza funkcję przyjmującą argument $x$ i zwracającą wynik $M$.
    • W Pythonie: lambda x: M
  2. Aplikacja (wywołanie funkcji):

    • $(M N)$
    • Oznacza zastosowanie funkcji $M$ do argumentu $N$.
    • W Pythonie: M(N)

Przykład: Funkcja tożsamościowa (Identity)

  • Lambda rachunek: $\lambda x. x$
  • Python: lambda x: x

Przykład: Funkcja stała

  • Lambda rachunek: $\lambda x. y$
  • Python: lambda x: y (zwraca y niezależnie od x)

Ważne pojęcia

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

3. Python a Lambda Calculus

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)  # 11

Większy przykład (dla studentów I stopnia)

Uruchomienie:

python 03-lambda-calculus/examples/lambda_playground.py

Zadania do samodzielnego rozwiązania

Pliki zadań:

pytest 03-lambda-calculus/exercises/test_solutions.py -v

Lista zadań

  1. zastosuj(f, x) – aplikacja funkcji do argumentu.
  2. stworz_mnoznik(n) – domknięcie z lambdą.
  3. kompozycja(f, g) – składanie funkcji f(g(x)).
  4. curry_add(x) – podstawy currying.
  5. mapuj_i_filtruj(...) – łączenie mapowania i filtrowania.

Referencje

Literatura

  • "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).

Źródła internetowe