-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Bart Jacobs edited this page Feb 14, 2018
·
41 revisions
In deze cursus gaan we de programmeertaal OCaml gebruiken. (F# is een uitbreiding van OCaml.)
We gaan de online programmeeromgeving Ocsigen gebruiken.
OCaml ondersteunt verschillende soorten waarden.
Opdracht:
- Tik
2 + 2
in. - OCaml antwoordt met
- : int = 4
. OCaml geeft aan dat de opgegeven uitdrukking van het typeint
is (het type van de gehele getallen, integers in het Engels) en evalueert tot de waarde 4.
Opdracht:
- Tik
"Hello, " ^ "world!"
in. - OCaml antwoordt met
- : string = "Hello, world!"
. De opgegeven uitdrukking is van het typestring
(het type van de stukken tekst) en evalueert tot de waarde"Hello, world!"
. Het bewerkingsteken^
dient om stukken tekst aan elkaar te plakken (string concatenation in het Engels).
Opdracht:
- Tik
1 / 2
in. - OCaml antwoordt met
- : int = 0
. Het bewerkingsteken/
staat voor gehele deling.
Opdracht:
- Tik
1.0 /. 2.0
in. - OCaml antwoordt met
- : float = 0.5
. De opgegeven uitdrukking is van het typefloat
(het type van de vlottende-kommagetallen, floating-point numbers in het Engels). Het bewerkingsteken/.
staat voor reële deling.
Opdracht:
- Tik
1 /. 2
in. - OCaml onderlijnt de uitdrukking
1
in het rood en zegt erover Error: This expression has typeint
but an expression was expected of typefloat
. OCaml is heel streng qua het correct gebruik van types: de reële deling mag enkel gebruikt worden met kommagetallen, en de gehele deling enkel met gehele getallen.
Opdracht:
- Tik
1 < 2
in. - OCaml antwoordt met
- : bool = true
. De ongelijkheid is waar (true
in Engels).true
enfalse
zijn de waarheidswaarden, ook Booleaanse waarden genoemd. Ze zijn van het typebool
.
Opdracht:
- Tik
true && false
in. - OCaml antwoordt met
- : bool = false
. Het bewerkingsteken&&
staat voor de logische EN-operatie.
Andere opdrachten zijn: aftrekking -
en vermenigvuldiging *
van gehele getallen, optelling +.
, aftrekking -.
, en vermenigvuldiging *.
van kommagetallen, en de logische OF-operatie ||
op Booleaanse waarden.
Opdracht:
- Tik
let x = 3
in. - Tik dan
x + 5
in. - OCaml antwoordt met
- : int = 8
. De opdrachtlet x = 3
bindt de waarde 3 aan de variabelex
.
Opdracht:
- Tik
let f x = x + 1
in. - Tik dan
f 3
in. - OCaml antwoordt met
- : int = 4
. De opdrachtlet f x = x + 1
definieert de functief
met parameterx
en lichaamx + 1
. De uitdrukkingf 3
staat voor de toepassing van de functief
op het argument3
. De waarde van zo'n functietoepassing is de waarde van het lichaam van de functie, waarbij de parameter gebonden wordt aan het opgegeven argument. Dus, de waarde vanf 3
is de waarde vanx + 1
waarbijx
gebonden wordt aan3
.
Oefening:
- Definieer een functie
begroeting
zodanig datbegroeting "Jan"
evalueert tot"Hallo, Jan!"
enbegroeting "Piet"
evalueert tot"Hallo, Piet!"
.
Oefening:
- Definieer een functie
positief
zodanig datpositief 1
enpositief 10
evalueren tottrue
enpositief 0
enpositief (-7)
totfalse
.
Opdracht:
- Tik
let f x y = x + y
in. - Tik dan
f 10 30
in. - OCaml antwoordt met
- : int = 40
. Functies kunnen meerdere parameters hebben. Je scheidt ze gewoon met een spatie. - Tik dan
f 100 (f 10 30)
in. - OCaml antwoordt met
- : int = 140
. Je moet haakjes gebruiken als je een complexe uitdrukking wilt gebruiken als argument voor een functie-oproep.
Oefening:
- Definieer een functie
tussen
zodanig dattussen x y z
evalueert tottrue
als en slechts alsy
tussenx
enz
ligt.
Opdracht:
- Tik
let rec macht x n = if n = 0 then 1 else x * macht x (n - 1)
in. - Tik dan
macht 2 3
in. - OCaml antwoordt met
- : int = 8
. Je kan een functie toepassen in haar eigen lichaam, op voorwaarde dat je delet rec
-opdracht gebruikt in plaats van delet
-opdracht. Zo'n functie noemen we een recursieve functie.
Oefening:
- Definieer de functie
sterren
zodanig datsterren 3
evalueert tot"***"
ensterren 5
evalueert tot"*****"
.
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
.
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.
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).
Oefening:
- Definieer een functie
lengte
zodanig dat `lengte [true; false