Skip to content
Bart Jacobs edited this page Feb 14, 2018 · 41 revisions

beOI'18-krokuscursus

In deze cursus gaan we de programmeertaal OCaml gebruiken. (F# is een uitbreiding van OCaml.)

We gaan de online programmeeromgeving Ocsigen gebruiken.

Waarden en bewerkingen

OCaml ondersteunt verschillende soorten waarden.

Opdracht:

  • Tik 2 + 2 in.
  • OCaml antwoordt met - : int = 4. OCaml geeft aan dat de opgegeven uitdrukking van het type int 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 type string (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 type float (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 type int but an expression was expected of type float. 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 en false zijn de waarheidswaarden, ook Booleaanse waarden genoemd. Ze zijn van het type bool.

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.

Variabelen

Opdracht:

  • Tik let x = 3 in.
  • Tik dan x + 5 in.
  • OCaml antwoordt met - : int = 8. De opdracht let x = 3 bindt de waarde 3 aan de variabele x.

Functies

Opdracht:

  • Tik let f x = x + 1 in.
  • Tik dan f 3 in.
  • OCaml antwoordt met - : int = 4. De opdracht let f x = x + 1 definieert de functie f met parameter x en lichaam x + 1. De uitdrukking f 3 staat voor de toepassing van de functie f op het argument 3. 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 van f 3 is de waarde van x + 1 waarbij x gebonden wordt aan 3.

Oefening:

  • Definieer een functie begroeting zodanig dat begroeting "Jan" evalueert tot "Hallo, Jan!" en begroeting "Piet" evalueert tot "Hallo, Piet!".

Oefening:

  • Definieer een functie positief zodanig dat positief 1 en positief 10 evalueren tot true en positief 0 en positief (-7) tot false.

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 dat tussen x y z evalueert tot true als en slechts als y tussen x en z ligt.

Recursieve functies

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 de let rec-opdracht gebruikt in plaats van de let-opdracht. Zo'n functie noemen we een recursieve functie.

Samengestelde waarden

Opdracht:

  • Tik [10; 20; 30; 40] in.
  • OCaml antwoordt met - : int list = [10; 20; 30; 40]. Het type int 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 uitdrukking e::l betekent: de lijst bestaande uit het element e gevolgd door de lijst l. Het eerste element van een (niet-lege) lijst noemen we het hoofd en de elementen ná het eerste element de staart. De uitdrukking e::l betekent dus: de lijst met hoofd e en staart l.

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 een match-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 een match-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).
Clone this wiki locally