Zbiory danych
W programowaniu funkcyjnym będziemy stykali się często z pojęciem krotki oraz listy. Krotka to zbiór N elementów dowolnego (określonego) typu, gdzie N jest stałe. Np:
1:
|
|
Krotek używamy jeśli potrzebujemy posłużyć się anonimową strukturą danych o stałej wielkości, gdzie kolejność elementów nadaje im znaczenie. Więc jeśli np. mamy funkcję, która ma nam zwrócić dwa pierwsze elementy listy, to zwróci ona parę. Mamy wtedy pewność, że dostaniemy dwa elementy, ni mniej, ni więcej.
Listy natomiast to łańcuchowe struktury do przechowywania dowolnej ilości danych jednego typu.
1: 2: 3: |
|
Lista ma głowę oraz ogon. Ogon jest listą pozostałych elementów (oprócz głowy).
Czyli tworząc listę nakładamy kolejne głowy zaczynając od pustej listy (stałej []
).
Zapoznamy się teraz z pojęciem rekurencji.
1: 2: 3: |
|
Schemat działania jest następujący: jeśli n <= 0
to zwróć listę pustą, w.p.p. oblicz rekurencyjnie wartość funkcji dla (n-1)
i nałóż na nią nową głowę o wartości value
.
Poniżej zobaczymy jak można użyć dekonstrukcji wartości list i krotek w wyrażeniu let
1: 2: 3: 4: 5: 6: 7: |
|
Zadania
- Napisz funkcję
len
obliczającą rekurencyjnie długość listy. - Napisz funkcję
succL
która przyjmuje listę znaków i zwraca listę gdzie do każdego elementu zaaplikowano funkcjęsucc
z poprzedniego modułu. - Napisz funkcję obliczającą rekurencyjnie wartość silnii dla podanego
n
. - Napisz funkcję generującą rekurencyjnie listę elementów od 0 do
n
.
Pytania? Jeśli wszystko jasne, to przechodzimy do następnego modułu
Full name: Sets.k
Full name: Sets.l
Full name: Sets.l2
Full name: Sets.l3
Full name: Sets.makeList
Full name: Sets.fst
Full name: Sets.snd
Full name: Sets.plus1