Functional programming
26 belangrijke vragen over Functional programming
Twee methoden voor parameterevaluatie zijn eager evaluation en normal-order evaluation. Wat is het verschil?
Bij eager evaluation wordt de actuele parameter eenmaal op het moment dat de procedure wordt aangeroepen geëvalueerd.
Bij normal-order evaluation wordt de actuele parameter bij elk voorkomen van de formele parameter geëvalueerd.
[T14.1]
Wat wordt bedoeld als een functie 'strikt' is met betrekking tot een bepaald argument?
Hiermee wordt bedoeld dat de functie het betreffende argument in elk geval zal gebruiken.
[T14.1]
Wat houdt de Church-Rosser property in?
De Church-Rosser property luidt als volgt:
Als een expressie kan worden geëvalueerd, dan leidt normal-order evaluation altijd tot een resultaat.
Als een expressie met verschillende methoden kan worden geëvalueerd - bijvoorbeeld eager en normal-order evaluation - dan leiden al deze methoden tot hetzelfde resultaat.
Programmeertalen die neveneffecten toestaan (zoals C, C++, Java en ADA) bezitten deze eigenschap niet.
[T14.1]
- Hogere cijfers + sneller leren
- Niets twee keer studeren
- 100% zeker alles onthouden
Normal-order evaluation is niet efficiënt omdat dezelfde parameter meerdere malen geëvalueerd wordt, ook al levert dit hetzelfde argument op. Op welke manier kunnen deze overbodige berekeningen voorkomen worden?
Dit kan voorkomen worden door toepassing van lazy evaluation, waarbij de actuele parameter eenmaal op het moment dat deze voor het eerst nodig is wordt geëvalueerd.
Als de programmeertaal de Church-Rosser property bezit, geeft lazy evaluation hetzelfde resultaat als normal-order evaluation.
[T14.1]
Wat wordt bedoeld met short-circuit-evaluatie?
Als bij de evaluatie van een samengestelde expressie volstaan kan worden met het resultaat van de eerste deelexpressie, worden de overige deelexpressies niet meer berekend.
[C4.3]
Wat wordt in relatie tot parameterevaluatie verstaan onder Jensen's device?
Het gebruik van een name-parameter in combinatie met een neveneffect van de wijziging van een globale variabele.
Jensen toonde hiermee aan dat het name-mechanisme in Algol-60 kan leiden tot gevolgen waar men voorheen niet bij stil had gestaan.
[C4.3]
In welk opzicht is lazy evaluation een variatie op normal-order evaluation?
[T14.1.1]
Wat wordt in Haskell bedoeld met partial application?
[T14.3.3]
Wat wordt in Haskell bedoeld met een lazy list?
[T14.3.4]
Wat wordt bedoeld met separation of control from calculation?
Deze scheiding is mogelijk door lazy evaluation.
[T14.3.4]
Waardoor wordt het functionele programmeerparadigma gekenmerkt?
Daarnaast is parametrisch polymorfisme een sleutelbegrip van het functionele paradigma en komt lazy evaluatie in sommige functionele talen voor.
[C14.intro]
Wat wordt bedoeld met een algebraic type in Haskell?
[C14.3]
Noem twee mechanismen in Haskell die het mogelijk maken om functies en operatoren op waarden van verschillend type toe te passen.
- Polymorfie. Een polymorfe functie werkt op een bepaalde datastructuur zonder gebruik te maken van de eigenschappen van de elementen.
- Overloading. Een overloaded functie kan op een aantal geheel verschillende typen werken. Overloading is mogelijk dankzij het bestaan van typeklassen.
Wat zijn in Haskell acties en waar dienen ze toe?
Acties zijn eersteklas waarden. Ze kunnen dus gebruikt worden als argument bij een functie, als resultaattype van een functie en bij samengestelde typen.
[C14.zelftoets]
Hoe kunnen acties in Haskell gebruikt worden?
[C14.zelftoets]
Beschrijf het verschil tussen een typeklasse (Haskell) en een objectklasse (OO-talen)
Een objectklasse is een verzameling objecten met verborgen variabelen van hetzelfde type en met dezelfde methoden. De variabelen van deze objecten worden in de klassedefinitie gedeclareerd. De methoden worden in de klassedefinitie niet alleen gespecificeerd, maar ook al gedefinieerd (behalve in abstracte objectklassen)
[C14.zelftoets]
Wat is in Haskell het verschil tussen het keyword type en het keyword data?
Het keyword data wordt gebruikt om een compleet nieuw type te declareren. In de declaratie van het nieuwe type wordt gebruikt gemaakt van een of meer constructors. Een constructor kan argumenten hebben.
[C14.5]
Noem twee manieren om in Haskell een cartesisch product te modelleren
- Door middel van een tupelconstructie
- Door middel van een datadeclaratie, waarbij de constructor-functie twee argumenten heeft
Noem drie manieren om in een objectgeoriënteerde taal een cartesisch product te modelleren
- Door middel van een objectklasse met twee attributen
- Door middel van een objectklasse met twee superklassen die elk een attribuut leveren.
- Door middel van een objectklasse met één superklasse, waarbij de superklasse en de subklasse beide een attribuut leveren
Hoe kan in Haskell een disjuncte vereniging worden gemodelleerd?
[C14.5]
Hoe kan in een objectgeoriënteerde taal een disjuncte vereniging worden gemodelleerd?
Als de taal interfaces kent, kunnen we van de superklasse een interface maken.
[C14.5]
Wat is het verschil tussen currying en partiële parametrisatie?
Een functie met meerdere parameters heet dan ook een gecurryde functie.
Van partiële parametrisatie is sprake als een gecurryde functie wordt aangeroepen met minder argumenten dan verwacht.
[C14.3.3]
Wat is in Haskell het verschil tussen een instance-declaratie en een deriving-clausule?
Met een instance-declaratie wordt een datatype toegevoegd aan een typeklasse door de vereiste functies erop te definiëren.
Met een deriving-clausule wordt een datatype automatisch tot instantie van een typeklasse gemaakt
[C5.2]
Hoe kunnen we in Haskell een functie met twee parameters parametriseren met betrekking tot de eerste parameter?
Door de functie te gebruiken als operator, waarbij de eerste parameter wordt weggelaten.
[C14.3.3]
Geef twee manieren waarop we in Haskell een samengestelde actie kunnen definiëren
- Met behulp van de monadische operatoren >> en >>==
- Met behulp van de do-notatie
[C14.3.7]
Hoe gemakkelijk is het in Java en Haskell om een disjuncte vereniging uit te breiden met een extra component of functie?
Het uitbreiden van een disjuncte vereniging met een extra functie is in Haskell eenvoudiger dan in Java.
Het uitbreiden van een disjuncte vereniging met een extra component is in Java eenvoudiger dan in Haskell.
[C14.6]
De vragen op deze pagina komen uit de samenvatting van het volgende studiemateriaal:
- Een unieke studie- en oefentool
- Nooit meer iets twee keer studeren
- Haal de cijfers waar je op hoopt
- 100% zeker alles onthouden