Voor computertalen geldt survival of the fittest: wie zich niet kan aanpassen verdwijnt uit de belangstelling. Van APL en ALGOL wil geen normaal mens meer iets weten, en Perl moet uitkijken. Op een discussieforum over de opkomst van sexy Ruby heb ik gelezen dat Prolog zo goed als dood is. Daar schrok ik van, want Prolog is één van de weinige programmeertalen die ik op school heb geleerd.
Destijds aan het eind van de jaren ’80 was de taal totaal anders dan andere talen die ik kende, zoals C en C++ en het heeft me heel wat nachten ploeteren in het computerlaboratorium gekost voordat ik het een beetje onder de knie kreg.
Moe werd ik er trouwens niet van, want Prolog fascineerde me, en fascineert me nog steeds, al werk ik er nooit meer mee. Typerend is dat je je algortimes moet onderbrengen in een stelsel van logische vergelijkingen, waardoor je gedwongen wordt je bezig te houden met zoiets abstracts als de essentie van het probleem. De associatie met Zen ligt dan voor de hand, en ik vond dan ook niet ongepast dat mijn leerboek destijds een oude Japanse prent op de omslag had.

Prolog, dat is: PROgrammation en LOGique. De taal, die vaak als tegenhanger wordt gezien van het Amerikaanse Lisp, is in eerste instantie ontwikkeld door de Fransman Alain Colmerauer.
Prolog is gebaseerd op predicatenlogica, een afdeling van van wetenschap waarbinnen je gedachten kunt laten dansen die zo fijnzinnig en complex zijn als de Genji monogatari, maar het komt neer op:
Een stelsel van redeneringen is geldig, als alle redeneringen binnen dat stelsel geldig zijn.
Omdat die redeneringen in alledaagse taal worden geformuleerd, moet je er mee oppassen. Iets kan logisch geldig en waanzin zijn gelijktijdig:
Ik pas in mijn jas
Mijn jas past in mijn tas
Dus ik pas in mijn tas.
In Prolog zeg je dat zo:
pastin(ik,jas).
pastin(jas,tas).
pastin(X,Z):-
pastin(X,Y),
pastin(Y,Z).
Als je vervolgens in het programma vraagt:
pastin(ik,tas).
Antwoordt het ding met:
Yes
Waarmee de geldigheid van de stellingen is bewezen. Prolog kun je gebruiken voor het bewijzen van theorema's.
Bij de ontwikkeling van Prolog heeft de nadruk gelegen op de natural language. Prolog is daar erg geschikt voor. Kijk maar eens hoe makkelijk het is om een programmaatje te schrijven waarmee je kunt testen of een woord een palindroom is, overigens een van de vele elegante Prolog-classics:
palindroom(Lijst) :- keerom(Lijst,Lijst).
keerom(L1,L2) :- k_om(L1,[],L2).
k_om([],L,L).
k_om([X|L],L2,L3) :- k_om(L,[X|L2],L3).
Hetzelfde ook kun je ook bereiken met een taal als Java, maar daarin kost het veel meer programmeerwerk, en zo mooi en zelfverklarend als in Prolog is het niet.
Destijds leek Prolog, de wereld te gaan veroveren. Daar is niets van terecht gekomen.
Maar hoewel het veel minder populair is dan Lisp, is Prolog zeker niet dood. Het wordt ingezet voor AI-systemen en voor onderzoek en toepassingen op het gebied van taal en machinevertalingen. Dat laatste vind ik een mooie aanleiding om de taal weer in de gaten te gaan houden.
1 comments:
Bedankt voor de interessante informatie
Post a Comment