Table of Contents

#+title Ćwiczenia

1 Wymagania

Dla wszystkich funkcji należy jawnie podać typ. Powinien to być typ jak najogólniejszy.

2 Proste funkcje

2.1 Przykład: funkcja podzielnePrzez3:

podzielnePrzez3 :: Integral a => a -> Bool
podzielnePrzez3 n = n `mod` 3 == 0

2.2 Zadania

2.2.1 toSamo

Zdefiniować funkcję, która zwraca swój argument.

toSamo 3 3
toSamo [1,2,3] [1,2,3]

2.2.2 kwadrat

Zdefiniować funkcję, która zwraca kwadrat swojego argumentu.

kwadrat 3 9

2.2.3 pusta

Zdefiniować funkcję, która sprawdza, czy lista jest pusta.

pusta [] True
pusta [1,2,3] False

3 Funkcje rekurencyjne

3.1 Zadania

3.1.1 silnia

3.1.2 fibonacci

3.1.3 ileRazyPrzez

Zdefiniować funkcję, która sprawdza, ile razy liczba jest podzielna bez reszty przez 3.

ileRazyPrzez 2 24 3
ileRazyPrzez 7 0

4 Obliczenia rekurencyjne na listach

4.1 Zadania

4.1.1 długość

Zdefiniować funkcję, która zwraca długość listy.

długość [] 0
długość [1,2,3] 3

4.1.2 suma

Zdefiniować funkcję, która zwraca sumę wszystkich elementów listy (dla listy pustej - 0).

suma [] 0
suma [1,2,3,4,5] 15

4.1.3 sumaLog

Zdefiniować funkcję, która zwraca sumę logiczną wszystkich elementów listy typu [Bool].

sumaLog [] False
sumaLog [True,False,True] True
sumaLog [False,False] False

4.1.4 maxB

Zdefiniować funkcję, która zwraca najwięjszy element listy. Jeśli lista jest pusta, zwraca najmniejszą wartość należącą do danego typu. Funkcja działa tylko dla list, których wartości są typu należącego do klasy Bounded.

4.1.5 następne

Zdefiniować funkcję, która bierze jako argument listę i przekształca ją w ten sposób, że każdy element zastępuje jego następnikiem.

nastepne [1,2,4,8] [2,3,5,9]
nastepne "Ala ma kota." "Bmb!nb!lpub/"

4.1.6 parzyste

Zdefiniować funkcję, która bierze jako argument listę liczb i przekształca ją w ten sposób, że każdy element zastępuje wartością True, jeśli jest to liczba parzysta, wartością False, jeśli nie.

parzyste [1,2,3,4] [False,True,False,True]

5 Funkcje wyższych rzędów I

5.1 mapowanie

Zdefiniować funkcję mapowanie, będącą uogólnieniem funkcji następne i parzyste. Funkcja mapowanie bierze dwa argumenty: funkcję, którą ma zastosować do przekształcania elementów i listę elementów do przekształcenia.

mapowanie signum [-2,-1,0,1,2] [-1,-1,0,1,1]
mapowanie null [[],[2,3],[]] [True,False,True]

5.1.1 następne'

Z wykorzystaniem funkcji mapowanie, zdefiniować funkcję następne', która działa tak samo, jak funkcja następne.

5.1.2 parzyste'

Z wykorzystaniem funkcji mapowanie, zdefiniować funkcję parzyste', która działa tak samo, jak funkcja parzyste.

5.2 redukcja

Zdefiniować funkcję redukcja, będącą uogólnieniem funkcji długość, suma, sumaLog i maxB. Funkcja redukcja bierze trzy argumenty:

  • funkcję, którą ma zastosować na aktualnej wartości i wyniku rekurencyjnego zastosowania siebie na reszcie listy;
  • wartość, od której zaczyna (tzn. wartość dla pustej listy);
  • listę na której ma wykonać rekurencyjne obliczenie.

Np. sumę elementów listy (przyjmując, że dla listy pustej zwracamy 0) oraz długość listy powinniśmy móc obliczyć tak:

redukcja (+) 0 [1,2,3,4,5] 15
redukcja (\_ n -> n+1) [1,2,3,4,5] 5

5.2.1 długość'

Z wykorzystaniem funkcji redukcja, zdefiniować funkcję długość', która działa tak samo, jak funkcja długość.

5.2.2 suma'

Z wykorzystaniem funkcji redukcja, zdefiniować funkcję suma', która działa tak samo, jak funkcja suma.

5.2.3 sumaLog'

Z wykorzystaniem funkcji redukcja, zdefiniować funkcję sumaLog', która działa tak samo, jak funkcja sumaLog.

5.2.4 iloczynLog'

Z wykorzystaniem funkcji redukcja, zdefiniować funkcję iloczynLog'.

5.2.5 maxB'

Z wykorzystaniem funkcji redukcja, zdefiniować funkcję maxB', która działa tak samo, jak funkcja maxB.

6 Złożenie funkcji

6.1 Przykład

maParzystąDługość :: [a] -> Bool
maParzystąDługość l = even (length l)
  • maParzystąDługość [1,2,3]
  • maParzystąDługość [1,2,3,4]
maParzystąDługość' :: [a] -> Bool
maParzystąDługość' l = (even . length) l
  • maParzystąDługość' [1,2,3]
  • maParzystąDługość' [1,2,3,4]
maParzystąDługość'' :: [a] -> Bool
maParzystąDługość'' = even . length
  • maParzystąDługość'' [1,2,3]
  • maParzystąDługość'' [1,2,3,4]

6.2 wszystkieParzyste

Zaimplementować funkcję "wszystkieParzyste" z wykorzystaniem funkcji parzyste' i iloczynLog'

wszystkieParzyste [1,2,3,4,5] False
wszystkieParzyste [2,4] True

6.3 pierwiastek z kwadratu

6.4 warunek, czy kwadrat argumentu jest większy od 10

Author: Tomasz Obrębski

Created: 2019-03-08 pią 11:50

Validate