Paradygmaty programowania/Ćwiczenia 8: U podstaw programowania funkcyjnego — rachunek lambda

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

Zadanie 1

Napisz termy reprezentujące następujące funkcje:

  • 𝒪(n1,...,nm)=0
  • 𝒮(x)=x+1
  • in(n1,...,nm)=xi.
Wskazówka:

Zadanie 2

Napisz termy definiujące funkcję kodującą parę liczb oraz funkcje rozkodowujące.

Wskazówka:

Zadanie 3

Niech funkcje h oraz g1,...,gm będą lambda definiowalne odpowiednio przez termy H, G1, ..., Gm, a jednoargumentowa funkcja t przez term T. Napisz termy reprezentujące funkcje:

  • f1(n1,...,nk)=h(g1(n1,...,nk),...,gm(n1,...,nk))
  • f2(x,n)=t(n)(x).
Wskazówka:

Zadanie 4

Napisz term reprezentujący funkcję f(n)=n!.

Wskazówka:

Zadanie 5

Napisz term reprezentujący funkcję Fibonacciego:


Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \aligned f(0) & = 1\\ f(1) & = 1\\ f(n+1) & = f(n) + f(n-1) \endaligned }
Wskazówka:

Zadanie 6

Jakiego typu są poniższe termy:

  • λx:αβ.λy:α.xy
  • λx:(αα)β.x(λy:α.y)
  • λx:α(βbeta).λy:α.xy

Zadanie 7

Podaj przykładowe termy (jeśli takowe istnieją) dla poniższych typów.

  • αβ
  • (α(αα))α
  • (αβ)(αα)
  • α(αβ)
  • ((αβ)β)α