Functies - SOGM

INF1 Practicum 10 / 17 oktober 2014
Functies Werk de vijf opdrachten stapsgewijs uit. Zet alle Schemecode in één bestand, laat ook waar van toepassing de pdfbestanden zien.
Voor deze opdrachten heb je de bestanden nodig die te
vinden zijn op https://github.com/marcdinkum/inf
De benodigde theorie kun je vinden in de syllabus op
http://sogm.hku.nl/inf/infbook/
Opdracht 1
•
Maak een functie die uitrekent wat de tijd in
milliseconden is tussen twee pulsen bij een door de
gebruiker in te voeren BPM. Zie voor de benodigde
berekening het MAX-practicum van 19 september.
Voorbeeld:
>(bpm-naar-ms 120)
Geeft als resultaat
> 500
Opdracht 2
•
•
Definieer twee motiefjes met daarin vier noten. Noem
deze motief1 en motief2
Maak een functie draai-om die motief1 of motief2
omgedraaid achter het origineel plaatst.
Voorbeeld
>(draai-om motief1)
Geeft als resultaat
>'(a b c d d c b a)
sogm.hku.nl
[email protected]
[email protected]
Maak een functie heen-en-weer die motief1 voor- en
achterwaarts vastgeplakt aan motief2 achter- en
voorwaarts teruggeeft.
Voorbeeld:
> (heen-en-weer motief1 motief2)
Geeft als resultaat
> '(a b c d d c b a e b g f f g b e)
Exporteer dit resultaat naar een Lilypond-bestand
•
•
Opdracht 3
Maak een functie eerste die bij invoer van een lijst
het eerste item uit de lijst als een lijst
teruggeeft.
Voorbeeld:
> (eerste '(a c gis a e)
Geeft als resultaat
> '(a)
Maak een functie roteer-linksom die een lijst
linksom roteert en een functie roteer-rechtsom die
een lijst rechtsom roteert. Met roteren wordt
bedoeld dat alle waarden in een lijst een plek
opschuiven. De laatste in de lijst zal de eerste
worden.
Voorbeeld:
> (roteer-linksom '(a b c d e))
Geeft als resultaat
> '(b c d e a)
•
•
Opdracht 4
•
•
Maak een functie geef-helft die de eerste helft van
een lijst teruggeeft, ongeacht uit hoeveel items de
lijst bestaat. Zoek daarbij uit hoe Scheme aangeeft
hoeveel elementen er in een lijst staan.
Voorbeeld:
> (geef-helft '(a bes c dis e f g gis))
Geeft als resultaat
> '(a bes c dis)
Maak een functie draai-helft-om die de eerste helft
van een even lijst omgekeerd teruggeeft.
Voorbeeld:
> (draai-helft-om ('a bes c dis e f g gis))
Geeft als resultaat
> '(dis c bes a)
sogm.hku.nl
[email protected]
[email protected]
•
Voor gevorderden:
Zorg dat de bovenstaande functies ook werken als de
lijst een oneven aantal items bevat. Bepaal zelf of
er naar onder of boven afgerond wordt.
Opdracht 5
•
•
Maak een muzikaal interessante compositie bestaand
uit een aantal motiefjes die bewerkt wordt door
functies die je gemaakt hebt in opdracht twee tot
en met vier. Pas ook bewerkingen toe die je vorige
weken hebt gebruikt in de opdrachten. Denk aan
omdraaien, willekeur, inkorten, transponeren etc.
Exporteer dit naar Lilypond.
Voor gevorderden:
Maak een functie die uitrekent hoeveel halve,
kwart- of achtste noten er in twee minuten muziek
bij een bepaald tempo passen. Maak vervolgens de
bovenstaande compositie twee minuten lang. sogm.hku.nl
[email protected]
[email protected]