-
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).