Haskell Opdrachten Taal, Wiskunde, Logica,

Eerste week

  1. Start het Hugs systeem op met behulp van het commando hugs, gevolgd door return. Je ziet dan iets dat lijkt op het volgende:
    jve@pidgeot twl2008]$ hugs
    __   __ __  __  ____   ___      _________________________________________
    ||   || ||  || ||  || ||__      Hugs 98: Based on the Haskell 98 standard
    ||___|| ||__|| ||__||  __||     Copyright (c) 1994-2005
    ||---||         ___||           World Wide Web: http://haskell.org/hugs
    ||   ||                         Bugs: http://hackage.haskell.org/trac/hugs
    ||   || Version: September 2006 _________________________________________
    
    Haskell 98 mode: Restart with command line option -98 to enable extensions
    
    Type :? for help
    Hugs>            
    
  2. Probeer nu eerst Haskell uit als rekenmachine. Hoeveel is 2^3^4 ? Wordt dit door de interpreter gelezen als (2^3)^4 of als 2^(3^4)?
  3. Bereken hoeveel seconden er in een schrikkeljaar gaan. Een schrikkeljaar heeft 366 dagen.
  4. Probeer de volgende commando's uit. Probeer steeds eerst te bedenken welke uitkomst je verwacht. Kijk dat wat je krijgt. Als je iets anders krijgt dan je verwachtte: ga na of je begrijpt wat er gebeurt.
    [ 2*n | n <- [1..10] ]
    
    [ n^2 | n <- [1..10] ]
    
    [ 2^n | n <- [1..10] ]
    
    map (\ n -> 2^n) [1..10]
    
  5. Taaltechnologen zijn meer geinteresseerd in werken met tekenrijtjes dan met getallen. Probeer de volgende commando's uit. Bedenk weer steeds eerst zelf welke uitkomst je verwacht, en controleer vervolgens met de computer.
    [ x | x <- ['a' .. 'z'] ]
    
    [ [x] | x <- ['a' .. 'k'] ]
    
    [ [[x]] | x <- ['a' .. 'k'] ]
    
    [ [x,'y'] | x <-  ['a' .. 'h' ] ]
    
    [ [x,y] | x <-  ['a' .. 'c' ], y <- ['d' .. 'f'] ]
    
    Verlaat nu de Hugs interpreter met behulp van 'control-d' (de control toets ingedrukt houden en een 'd' intypen), of met behulp van :q.
  6. Maak een tekstbestand aan met de titel kwadraat.hs en zorg dat er het volgende in staat:
    kwdr :: Integer -> Integer
    kwdr x = x * x 
    
    Sla het bestand op. Blijf in hetzelfde directory waar kwadraat.hs zich bevindt, en start Hugs opnieuw op met behulp van het commando hugs kwadraat.hs, gevolgd door return. Je komt nu opnieuw in het systeem, maar dit keer is de prompt niet Hugs> maar Main>. Dit geeft aan dat er een eigen bestand is geladen. Probeer de definitie uit:
    Main> kwdr 7
    
    Bereken vervolgens:
    Main> kwdr kwdr kwdr kwdr 7
    
  7. Verlaat het systeem weer, en start nu op met typen.hs, dat je vantevoren hebt opgehaald van internet (het staat hier). Probeer de definities uit:
     
    Main> kwadraat 8 
    
    Main> drievoud 7
    
    Main> awoord "zeven"
    
    Ga na of kwadraat zich op dezelfde manier gedraagt als de functie kwdr uit de vorige opdracht. Zo nee, wat is het verschil?
  8. Gebruik nu een editor om het bestand typen.hs aan te vullen met een eigen definitie van bwoord, voor tekenrijtjes die de letter 'b' bevatten. Laad de nieuwe versie, en probeer uit.
  9. Gebruik het Hugs commando t: om uit te vinden wat de types zijn van de volgende voorgedeclareerde functies: Probeer vervolgens deze functies uit, met argumenten van de juiste typen, en probeer erachter te komen wat de functies doen. Schrijf zo precies mogelijke omschrijvingen op van het gedrag van de functies.

Huiswerk

Tekstbestand met alle antwoorden. Deadline: maandag 28 april, 12 uur 's middags. Per email inleveren bij Arno Bastenhof, met een cc naar Jan van Eijck.


Jan van Eijck
Last modified: Tue Apr 22 17:46:06 CEST 2008