Functioneel programmeren

Vergelijkbare documenten
Functioneel programmeren

Practicumopdracht 1: Elektronische agenda s

Ook in 2008 daalde de verkoopprijs van een album. Gemiddeld moet de consument 12,45 euro betalen.

Koppeling met een database

Tentamen Databases voor iku

TECHNISCHE UNIVERSITEIT EINDHOVEN. Faculteit Wiskunde en Informatica

Computervaardigheden. Universiteit Antwerpen. Computervaardigheden en Programmatie. Grafieken en Rapporten 1. Inhoud. Anatomie van een databank

Databank - Basis 1. Inhoud. Computervaardigheden en Programmatie. Hoofdstuk 4 Databank - Basis. Terminologie. Navigeren door een Venster

[TOETS SQL INLEIDING]

Practicumopgave 3: SAT-solver

Structured Query Language (SQL)

SQL Aantekeningen 3. Maarten de Rijke 22 mei 2003

Technische nota AbiFire Rapporten maken via ODBC

Relaties tussen twee tabellen definiëren

Introductie (relationele) databases

Data Manipulatie. Query Talen. / Informatica

Tentamen Informatica 6, 2IJ60,

Hoe bouw ik een component? Drs. Arjan Burger

Tentamen Informatica 6, 2IJ60,

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010

Macro s. 4.2 Een macro maken

Databases - Inleiding

Databases (INFODB) 20 april 2010

Verzamelingen, Lijsten, Functioneel Programmeren

Les S-02: Meer geavanceerde SQL-instructies

SQL: query taal met. woorden. ISO SQL: Structured Query Language. de SQL basis query structuur. voorbeeld: doel: intuitieve query taal

Verzamelingen, Lijsten, Functioneel Programmeren

Haskell: programmeren in een luie, puur functionele taal

Toon TITEL, JAAR en PLATVORM van GAMES die voor het jaar 2000 uitkwamen op Nintendo 64

U ziet de progressie van de download aan de groene blokjes in het balkje helemaal onder aan de pagina.

Gebruikers Handleiding

Installatiehandleiding Cane Webservices.nl Integratie

Les S-01: De basisbeginselen van SQL

Query SQL Boekje. Fredrik Hamer

EXAMEN juni 2016 Gegevensbanken

$17,3/$*,$$762)7:$5( o.b.v. Ephorus; handleiding voor docenten (1 en aangepast door Geert Veneklaas (HAN).

Workshop 3x. Normaliseren. Normaliseren. Hiëarchische database ODBMS. Relationele database. Workshop 14 oktober A. Snippe ICT Lyceum 1

ISO SQL: Structured Query Language

Installatiehandleiding Business Assistent

Algoritmisch Denken: Dodo s Bit Parity

Technische nota AbiFire5 Rapporten maken via ODBC

Informatie & Databases

12. Meer dan één tabel gebruiken en sub-queries

CAK Installatiehandleiding

We moeten de accommodaties selecteren die 3 sterren hebben, en in land met ID 10 zitten.

7. Het selecteren van gegevens

Databases en SQL Foundation (DBSQLF.NL)

Kies File>New>Blank Page>PHP. Je kunt eventueel nog een stylesheet koppelen. Definieer nu eerst een site! Dat betekent: Site>New Site

Informatica toets vwo 6 Databases

Installatiehandleiding Business Assistent

Databases gebruiken. Databases gebruiken

Verzamelingen, Lijsten, Functioneel Programmeren

Installatie SQL: Server 2008R2

Inleiding Databases en Data Base Management Systems Tabellen Wat is SQL?... 5

Een introductie tot gegevensbanken

Katholieke Hogeschool Kempen Campus Geel Departement Handelswetenschappen en Bedrijfskunde 3de jaar Toegepaste Informatica

EXIN Databases en SQL Foundation

SQL is opgebouwd rond een basisinstructie waaraan één of meerdere componenten worden toegevoegd.

F. TRUYEN - Informatiekunde QBE. MS Access

Advanced Databases Topic 2: query processing aspects query optimisation. Query optimisation. Van SQL naar XRA. Algebraïsche herschrijving

STUDIEWIJZER WEB PENTESTING BACHELOR IN DE TOEGEPASTE INFORM ATICA SEMESTER 2 ACADEMIEJAAR LECTOR PARCIFAL AERTSSEN

Maak automatisch een geschikte configuratie van een softwaresysteem;

Wat is FP? The Haskell School of Expression. Functies. Types 1+1=2. Iedere expressie (en waarde) heeft een type.

Les S-01: De basisbeginselen van SQL

8. Koppeling met een database

1 Labo 4 H 8 Jobs, Alerts en Operators H 9 Monitoring en Troubleshooting

Toets Programmeren, 2YP05 op donderdag 13 november 2008, 09:00-12:00

Voor de database wordt een Access 2000 bestand gebruikt, met voorlopig 1 tabel:

11. Het selecteren van gegevens deel II

Oracle client 1.2 voor ixperion 1.3 en hoger

NIS Notarieel Informatie Systeem

Zorg ervoor dat je een database hebt aangevraagd op Open daarna het volgende adres in je browser:

Excel Controller. Handleiding Excel Controller Wizard

NHibernate als ORM oplossing

Hoofdstuk: 1 Principes van databases

1 Inleiding in Functioneel Programmeren

De nieuwste build van CarmenTV Injector heeft een aantal verbeterde en nieuwe functies.

Beheer van databanken

Info-books. Toegepaste Informatica. Handleiding. Deel 40c : Gegevensbeheer en algoritmen in Access. HA40c. Jos Gils Erik Goossens

Cursus Analyse voor Web Applicaties 1. Webdesign / Web Programmeren Analyse voor web applicaties SDM methode + Basis UML

9. Het wijzigen van gegevens

Sparse columns in SQL server 2008

Les 10 : Aanmaken van een database (deel2).

Handleiding CMS. Auteur: J. Bijl Coldfusion Consultant

DBMS. DataBase Management System. Op dit moment gebruiken bijna alle DBMS'en het relationele model. Deze worden RDBMS'en genoemd.

TECHNISCHE UNIVERSITEIT EINDHOVEN Faculteit Wiskunde en Informatica. Proeftentamen ISO (2R290), query-gedeelte, Oktober 2006

Auteur Arjaan den Ouden Datum 4 december 2013 Status Definitief Versie 1.0

Automatische Installatie op IIS server

Alleen deze bladen inleveren! Let op je naam, studentnummer en klas

Les 15 : updaten van gegevens in de database (deel2).

Excellerend Kwartaaltip

MODULE 5: DATABASES met Access 2002

1. Inleiding Inleiding SQL Inleiding Database, databaseserver en databasetaal Het relationele model...

Technisch ontwerp. Projectteam 6. Project "Web Essentials" 02 april Versie 2.1.0

Proefstuderen Informatica

INSTRUCT Samenvatting Praktijk Access 2010, H2 SAMENVATTING HOOFDSTUK 2

Programmeren (1) Examen NAAM:

inleiding theoretische informatica practicum 1 deadline woensdag 20 februari 2008 om uur

ADVIESRAPPORT DESIGNOMGEVING VOOR HET VISUALISEREN VAN WASSINGEN IN 3D CAD PROGRAMMA S HELENA PHAN /01/2016 FASHION & MANAGEMENT 1

Transcriptie:

Functioneel programmeren Practicumopgave 1: Een functionele querytaal Deze practicumopgave draait om het in Haskell inpassen van een eenvoudig querytaaltje voor databases. We zullen database-tabellen representeren met waarden van het volgende type: type Table = (String, [String ], [[String ]]). Een Table-waarde is dus een drie-tupel; de componenten van zo n tupel komen overeen met, achtereenvolgens, de naam van de tabel, de namen van de kolommen en de records in de tabel. Alle waarden in een record worden gerepresenteerd met behulp van String-waarden. Hieronder volgen twee voorbeelden van tabellen die op deze manier gerepresenteerd zijn. De eerste tabel bevat de hoogste tien noteringen in de Nederlandse Top 40 voor week 7 van 2008: top10 :: Table top10 = ("Top10", ["Nr", "Artist", "Title"], [ ["1", "Mark Ronson ft. Amy Winehouse", "Valerie"], ["2", "Alain Clark", "Father and Friend"], ["3", "Leona Lewis", "Bleeding Love"], ["4", "Kane", "Catwalk Criminal"], ["5", "Colbie Caillat", "Bubbly"], ["6", "Anouk", "I Don t Wanna Hurt"], ["7", "Timbaland ft One Republic", "Apologize"], ["8", "Lenny Kravitz", "I ll Be Waiting"], ["9", "DJ Jean", "The Lauch Relaunched"], ["10", "Rihanna", "Don t Stop the Music"] ] ). De tweede tabel bevat, voor sommigen van de artiesten uit de vorige tabel, informatie over de genres waarbinnen ze actief zijn: genre :: Table genre = ("Genre", ["Artist", "Genre"], [ ["Alain Clark", "Pop"], ["Anouk", "Pop"], ["Anouk", "Rock"], ["DJ Jean", "Dance"], ["Kane", "Rock"], ["Lenny Kravitz", "Rock"], ["Lenny Kravitz", "Soul"], ["Rihanna", "R&B"] ] ). 1

Opgave 1 printtable :: Table IO () die een tabel weergeeft op het scherm. printtable top10 Top10: Nr Artist Title ------------------------------------------------------- 1 Mark Ronson ft. Amy Winehouse Valerie 2 Alain Clark Father and Friend 3 Leona Lewis Bleeding Love 4 Kane Catwalk Criminal 5 Colbie Caillat Bubbly 6 Anouk I Don t Wanna Hurt 7 Timbaland ft One Republic Apologize 8 Lenny Kravitz I ll Be Waiting 9 DJ Jean The Lauch Relaunched 10 Rihanna Don t Stop the Music Zorg ervoor dat de uitvoer van je functie, voor wat betreft de layout, exact overeenkomt met het voorbeeld hierboven. Opgave 2 count :: Table Int die het aantal records in een gegeven tabel oplevert. print (count top10 ) moet bijvoorbeeld de uitvoer 10 opleveren. Opgave 3 project :: [String ] Table Table die een gespecificeerde deelverzameling van de kolommen uit een tabel selecteert. printtable (project ["Nr", "Title"] top10 ) 2

Top10: Nr Title ------------------------- 1 Valerie 2 Father and Friend 3 Bleeding Love 4 Catwalk Criminal 5 Bubbly 6 I Don t Wanna Hurt 7 Apologize 8 I ll Be Waiting 9 The Lauch Relaunched 10 Don t Stop the Music Opgave 4 select :: String (String Bool) Table Table zodat de expressie select k p t een tabel produceert met daarin alle records uit t waarvoor de waarde in kolom k aan het predicaat p voldoet. printtable (select "Nr" p top10 ) where p x = readint x 3 Top10: Nr Artist Title ---------------------------------------------------- 1 Mark Ronson ft. Amy Winehouse Valerie 2 Alain Clark Father and Friend 3 Leona Lewis Bleeding Love Opgave 5 De volgende te schrijven functie stelt ons in staat om twee tabellen te combineren. We mogen er hierbij vanuit gaan dat de te combineren tabellen precies één kolom gemeenschappelijk hebben. De tabellen top10 en genre, bijvoorbeeld, hebben deze eigenschap: ze bevatten beide een kolom "Artist". De gecombineerde tabel zal alle kolommen van de eerste tabel bevatten, gevolgd door alle kolommen van de tweede tabel die in de eerste tabel niet voorkomen. Het aantal kolommen in de gecombineerde tabel zal dus één kleiner zijn dan de som van de aantallen kolommen van de eerste en de tweede tabel. De records van de nieuwe tabel worden gevormd door records van de samenstellende tabellen te combineren waar deze dezelfde waarde in de gemeenschappelijke kolom hebben. De naam van de gecombineerde tabel wordt gevormd door de namen van de samenstellende tabellen samen te voegen. Schrijf nu een functie 3

join :: Table Table Table zodat join t 1 t 2 de tabellen t 1 en t 2 op de hierboven beschreven manier combineert. printtable (join top10 genre) Top10 Genre: Nr Artist Title Genre ------------------------------------------------------------- 2 Alain Clark Father and Friend Pop 4 Kane Catwalk Criminal Rock 6 Anouk I Don t Wanna Hurt Pop 6 Anouk I Don t Wanna Hurt Rock 8 Lenny Kravitz I ll Be Waiting Rock 8 Lenny Kravitz I ll Be Waiting Soul 9 DJ Jean The Lauch Relaunched Dance 10 Rihanna Don t Stop the Music R&B Aanwijzingen Bedien je van een nette programmeerstijl: zorg dat er niet te veel code op een regel terechtkomt (een goede richtlijn is maximaal 80 kolommen per regel) en voorzie je functies van duidelijk commentaar. Het gebruik van lijstcomprehensies en hogere-ordefuncties als map, foldr, filter en zip verdient aanbeveling. Deel je uitwerkingen op in kleine functies en test deze zo veel mogelijk in isolement. Om je complete implementatie van de functionele querytaal uiteindelijk grondig te testen kun je queries naar hartelust combineren. Zo zou de expressie printtable (project ["Nr", "Genre"] (select "Nr" p (join top10 genre))) where p x = readint x 6 de volgende uitvoer moeten opleveren: Top10 Genre: Nr Genre ---------- 2 Pop 4 Rock 6 Pop 6 Rock Inleveren Rangschik alle geschreven functies (dus zowel de gevraagde functies als de hulpfuncties) in een module Fql (voor functional query language ) en plaats deze module in een bestand Fql.hs. 4

Begin het bestand met commentaarregels waarin je naam, login en studentnummer vermeld worden. Als je de opdracht met zijn tweeën gemaakt hebt, vermeld dan de gegevens van beide teamleden. Lever dit bestand, met behulp van Submit, vóór maandag 3 maart 2008, 23:59 uur in via http://www.cs.uu.nl/docs/submit/ Zorg ervoor dat je code correct functioneert met Helium (versie 1.6). Als je module niet door de vertaler geaccepteerd wordt, komt je uitwerking niet in aanmerking voor een cijfer. Het overnemen van uitwerkingen, bijvoorbeeld van medestudenten of van het internet, is niet toegestaan. 5