-
Notifications
You must be signed in to change notification settings - Fork 0
Lijsten
Bart Jacobs edited this page Feb 15, 2018
·
1 revision
Opdracht:
- Tik
[10; 20; 30; 40]
in. - OCaml antwoordt met
- : int list = [10; 20; 30; 40]
. Het typeint list
is het type van lijsten van gehele getallen.
Opdracht:
- Tik
10::20::30::40::[]
in. - OCaml antwoordt met
- : int list = [10; 20; 30; 40]
. De uitdrukkinge::l
betekent: de lijst bestaande uit het elemente
gevolgd door de lijstl
. Het eerste element van een (niet-lege) lijst noemen we het hoofd en de elementen ná het eerste element de staart. De uitdrukkinge::l
betekent dus: de lijst met hoofde
en staartl
.
Opdracht:
- Tik
let aftelling_0 = [0]
in. - OCaml antwoordt met
aftelling_0 : int list = [0]
. - Tik
let aftelling_1 = 1::aftelling_0
in. - OCaml antwoordt met
aftelling_1 : int list = [1; 0]
. - Tik
let aftelling_2 = 2::aftelling_1
in. - OCaml antwoordt met
aftelling_2 : int list = [2; 1; 0]
. - Tik
let aftelling_3 = 3::aftelling_2
in. - OCaml antwoordt met
aftelling_3 : int list = [3; 2; 1; 0]
.
Oefening:
- Definieer een functie
aftelling
zodanig dataftelling 2
evalueert tot[2; 1; 0]
enaftelling 4
evalueert tot[4; 3; 2; 1; 0]
.
Opdracht:
- Tik
let leeg xs = match xs with [] -> true | hoofd::staart -> false
in. - Tik dan
leeg []
in. - OCaml antwoordt met
- : bool = true
. - Tik dan
leeg [10]
in. - OCaml antwoordt met
- : bool = false
. Je kan eenmatch
-uitdrukking gebruiken om verschillende berekeningen te doen afhankelijk van de vorm van een lijst. Meer bepaald: de uitdrukkingmatch xs with [] -> U1 | hoofd::staart -> U2
evalueert tot de waarde vanU1
alsxs
een lege lijst is, en tot de waarde vanU2
, waarbijhoofd
gebonden wordt aan het hoofd (eerste element) vanxs
enstaart
aan de staart vanxs
(de lijst die je krijgt door het eerste element vanxs
weg te laten), alsxs
niet leeg is.
Opdracht:
- Tik
let som_eerste_twee xs = match xs with eerste::tweede::_ -> eerste + tweede
in. - Tik dan
som_eerste_twee [10; 20; 30]
in. - OCaml antwoordt met
- : int = 30
. - Tik dan
som_eerste_twee [10]
in. - OCaml antwoordt met
Exception: Match_failure
. Als je in eenmatch
-uitdrukking niet alle gevallen behandelt, krijg je een waarschuwing. Als je dan de uitdrukking evalueert voor een geval dat niet behandeld wordt, krijg je een uitzondering (exception in het Engels).
Opdracht:
- Tik
let hoofd_van xs = match xs with hoofd::staart -> hoofd
in. - Tik dan
hoofd_van [1;2;3]
in. - OCaml antwoordt met
- : int = 1
. - Tik dan
hoofd_van [10;20]
in. - OCaml antwoordt met
- : int = 10
.
Opdracht:
- Tik
let staart_van xs = match xs with hoofd::staart -> staart
in. - Tik dan
staart_van [1;2;3]
in. - OCaml antwoordt met
- : int list = [2;3]
. - Tik dan
staart_van [10;20]
in. - OCaml antwoordt met
- : int list = [20]
.
Oefening:
- Definieer een functie
lengte
zodanig datlengte [true; false]
evalueert tot2
enlengte ["Hallo"]
evalueert tot1
enlengte [1.0; 2.0; 3.0]
evalueert tot3
.
Merk op:
lengte ["a"; "b"; "c"]
= lengte ("a"::"b"::"c"::[])
= lengte ("a"::("b"::("c"::[])))
= 1 + lengte ("b"::("c"::[]))
= 1 + (1 + lengte ("c"::[]))
= 1 + (1 + (1 + lengte []))
= 1 + (1 + (1 + 0))
= 3
Oefening:
- Definieer een functie
som
zodanig datsom [1; 2; 3]
evalueert tot6
ensom [7; 3; 11]
evalueert tot21
.
Oefening:
- Definieer een functie
filter_pos
zodanig datfilter_pos [10; -3; 5]
evalueert tot[10; 5]
enfilter_pos [-7; 0; 8]
evalueert tot[8]
.
Oefening:
- Definieer een functie
negatie
zodanig datnegatie [10; -20]
evalueert tot[-10; 20]
.
Oefening:
- Definieer een functie
aan_elkaar
zodanig dataan_elkaar [1; 2] [3; 4]
evalueert tot[1; 2; 3; 4]
.
Oefening:
- Definieer een functie
alles_aan_elkaar
zodanig datalles_aan_elkaar [[10; 20]; [30; 40]; [50]]
evalueert tot[10; 20; 30; 40; 50]
.
Oefening:
- Definieer een functie
voeg_in
die, gegeven een geheel getal en een gesorteerde lijst van gehele getallen, de gesorteerde lijst berekent die je bekomt als je het element op de juiste plaats invoegt in de gegeven gesorteerde lijst.
Oefening:
- Definieer een functie
sorteer
zodanig datsorteer [3; 1; 2]
evalueert tot[1; 2; 3]
. Hint: gebruik de functievoeg_in
.
Merk op dat de functie sorteer
een kwadratische uitvoeringstijd heeft: het aantal evaluaties van voeg_in
gegenereerd door een evaluatie van sorteer xs
, waarbij xs
een lijst van lengte N is, is in het slechtste geval N + (N - 1) + ... + 1 = N*(N+1)/2. Dit betekent dat de uitvoeringstijd sterk toeneemt naarmate de lengte van de te sorteren lijst toeneemt. Later zullen we efficiëntere sorteeralgoritmes zien.