Wanneer faalt patroonherkenning?

Betreft: derdejaarsproject
Docent:
Arjan van IJzendoorn
Student:
Maarten Löffler

In Haskell kunnen programma’s tijdens het draaien op weinig manieren fout gaan. De grootste bronnen van fouten in talen als C++ en Java zijn typeringsfouten en verkeerd beheer van geheugen. Deze categorieën fouten zijn onmogelijk in Haskell: alle types zijn statisch gecontroleerd en van geheugenbeheer ben je geabstraheerd.

Partiële functies blijven dan nog over als bron van fouten tijdens het draaien van het programma; een functie die niet gedefinieerd is voor alle gevallen kan falen als de verkeerde parameters meegegeven worden. Denk bijvoorbeeld aan de sum functie op lijsten en het vergeten van het geval voor de lege lijst.

In veel gevallen is het mogelijk om automatisch te bepalen of een functiedefinitie partieel is, misschien wel in alle gevallen. De opdracht is dan ook om uit te zoeken onder welke voorwaarden een functie partieel gedefinieerd is en hoe de programmeur daar zo duidelijk mogelijk op gewezen kan worden. Naast dit onderzoek kan gewerkt worden aan een implementatie in de Helium compiler. De Helium compiler wordt gebruikt in het onderwijs (Functioneel Programmeren) en het toevoegen van deze meldingen komt de kwaliteit van het onderwijs ten goede.

Het doel is iets uitgebreider dan puur het bepalen wanneer patroonherkenning faalt. Er moet ook rekening gehouden worden met gevalsonderscheid d.m.v. guards. Ook kan een zij-effect van dit onderzoek zijn dat de programmeur ook iets te horen krijgt als patronen overlappen en er dus sprake is van unreachable code. Patroonherkenning vindt niet alleen plaats aan de linkerkant van het =-teken, maar ook in case-expressies, lambda's en de do-notatie.

De volgende activiteiten zijn nodig in dit project:

Kortom, literatuuronderzoek, theoretisch en praktisch onderzoek en implementatie zijn allemaal vertegenwoordigd in dit project.