Opgave 0

Deze eerste opdracht is om je Prolog-kennis op te frissen en te controleren of je Linux omgeving correct ingesteld is. De opdracht hoeft daarom niet ingeleverd te worden. Gebruik bij de opdrachten SICStus Prolog (UNIX commando: sicstus).

Een type/token teller

Definieer predicaat woordenteller/3 waarbij argument 1 een gegeven lijst woorden is (een “corpus”), en argument 2 het aantal woorden (tokens) dat in Lijst voorkomt. Argument 3 is het aantal types.

woordenteller(+Lijst,?AantalTokens,?AantalTypes).

Bijvoorbeeld:

?- woordenteller([dit,is,een,zin,en,dit,is,een,voorbeeld],Woorden,Types).

Woorden=9,
Types=6

Test je predicaat met Sicstus Prolog (gebruik het sicstus commando).

Tip: Maak zoveel mogelijk gebruik van predikaten die al gedefinieerd zijn.

Tip2: Sicstus heeft readline interface als SWI-Prolog (waarmee je door de geschiedenis kunt lopen). Dit kun je wel simuleren door rlwrap sicstus uit te voeren.

Palindromen

Definieer een predicaat palindroom/1 dat slaagt als een woord een palindroom is, dwz. dat het omdraaien van het woord hetzelfde woord oplevert. Het enige argument is een woord als een lijst van karakters.

palindroom(+Woord)

Bijvoorbeeld:

?- palindroom(['l','e','v','e','n','s','n','e','v','e','l']).
yes
?- palindroom(['p','a','l','i','n','d','r','o','o','m']).
no

De Hdrug omgeving

In de komende weken ga je de Hdrug omgeving gebruiken. Je gaat nu je omgeving instellen zodat dit werkt:

  • Voeg /net/aps/64/bin toe aan je PATH variabele (export PATH=$PATH:/net/aps/64/bin).

  • Start nu Hdrug met:

    hdrug -l start

Het is vervelend om elke keer het pad te moeten zetten. Maak een bestand .bashrc in je home directory met in ieder geval de volgende inhoud:

#!/bin/sh

export PATH=$PATH:/net/aps/64/bin

Als je dit bestand al hebt, kun je alleen de laatste regel toevoegen.

Anagrammen

Een anagram is een woord dat is gevormd door de letters van een ander woord van volgorde te veranderen. Bijvoorbeeld slapste en spatels zijn anagrammen van stapels. Schrijf een predicaat ‘anagram/2’ dat slaagt als twee woorden anagrammen van elkaar zijn. Bijvoorbeeld:

?- anagram(['s','t','a','p','e','l','s'],['s','p','a','t','e','l','s']).
true
?- anagram(['s','t','a','p','e','l','s'],['l','o','p','e','n']).
false