Prolog (uit het Frans "programmation en logique", "programmeren met logica") is een logische programmeertaal. De taal is gebaseerd op predicatenlogica en heeft een sterk declaratief karakter. In plaats van de stappen die tot de oplossing van een probleem leiden, worden de voorwaarden waaraan de oplossing moet voldoen in logische termen beschreven. Vandaar dat Prolog een (grotendeels) declaratieve taal is.
Ontwikkeling Prolog werd oorspronkelijk in 1971-72 ontworpen door Alain Colmerauer en zijn vakgroep aan de Universiteit van Marseille (Frankrijk). Het was de eerste implementatie van de ideeën van Robert Kowalski over het gebruik van Horn-clausules als basis voor een programmeertaal. De eerste versie van de nieuwe taal werd door Colmerauers collega Philippe Roussel geïmplementeerd in Algol, in het najaar van 1972; diens vrouw bedacht de naam van de nieuwe taal. De eerste applicatie was een basaal dialoogsysteem dat met een gebruiker in het Frans kon converseren. In 1973 kreeg Colmerauers groep genoeg geld toegewezen om een tweede implementatie te ontwikkelen: een interpreter, geschreven in Fortran.
Een volgende mijlpaal werd bereikt met een Prologsysteem dat op een DEC PDP-10 van de Universiteit van Edinburgh draaide. Met name David H.D. Warren speelde hierbij een belangrijke rol met de ontwikkeling van de Warren Abstract Machine. Deze versie van Prolog bood vele optimalisaties en uitbreidingen en was de eerste die kon worden gecompileerd naar DEC-10-machinetaal. Edinburgh Prolog geldt in velerlei opzicht nog steeds als richtinggevend. In 1995 werd Prolog door de ISO gestandaardiseerd, waarbij het Edinburgh-I/O-systeem en vele predicaten werden vervangen. Dit leidde tot enige kritiekProlog overview, de Ransar en heeft ertoe geleid dat vele moderne implementaties beide versies ondersteunen.
Edinburgh-standaard Omdat veel werk aan vroege compilers en interpreters aan de Universiteit van Edinburgh plaatsvond, kreeg de uiteindelijke implementatie de status van de facto standaard voor vroege implementaties, de Edinburgh-standaard. Deze laat nog steeds sporen na, hoewel inmiddels een formele standaard bestaat. Grote delen van deze standaard worden door moderne implementaties nog steeds ondersteund.
Warren Abstract Machine
In 1983 ontwierp David H.D. Warren een virtuele machine gericht op de taal Prolog: een instructieset die Prolog-compilers kunnen gebruiken als intermediair tussen de semantiek van Prolog, gebaseerd op het doorzoeken van een verzameling mogelijke oplossingen voor een logisch probleem, en de werking van computerprocessors. WAM-programma's kunnen vervolgens direct uitgevoerd worden door een interpreter, of verder vertaald naar machinecode. Warrens werk maakte als eerste de uitvoering van logische programma's snel genoeg voor algemeen gebruik.Russell en Norvig (2003:290–292).
Ondanks het feit dat het ook mogelijk is naar native machinetaal te compileren, zijn WAM's nog steeds vrij algemeen. De voordelen van een native implementatie zijn beperkt doordat vrij veel functionaliteit uiteindelijk toch in support-functies moet worden geïmplementeerd en het wiel veelvuldig opnieuw moet worden uitgevonden. Tevens worden onvermijdelijk machine-afhankelijkheden (machine dependencies) geïntroduceerd, wat de portabiliteit niet ten goede komt.
Quintus en SICStus Omdat standaarden ontbraken of nog in de kinderschoenen stonden,SICStus Prolog -- the first 25 years, Mats Carlsson, Per Mildner was er een wildgroei aan dialecten, waarbij iedere leverancier zijn eigen dialect gebruikte. Vanwege de industriële kwaliteit en de vele innovaties werd Quintus Prolog, dat in nauwe samenwerking met de Universiteit van Edinburgh was ontwikkeld, een de facto standaard. Tot de belangrijkste innovaties behoren de foreign language interface, dat het ontwikkelen van software in andere computertalen mogelijk maakte en een systeem om Prologbroncode in modules te verdelen en zodoende de ontwikkeling van grote systemen makkelijker te maken.
In de jaren 1985 tot 1990 ontstond uit een soortgelijke samenwerking in Zweden, waar ook andere vakgroepen en commerciële partijen aan deelnamen, het instituut SICS (Swedish Institute of Computer Science). Het hoofddoel van het onderzoek was de werklast over meerdere processoren te verdelen, or-parallel, waarbij verschillende alternatieven tegelijkertijd worden overwogen. Dit werd verwezenlijkt met het Aurora-project, waarin ook Warren een belangrijke rol speelde. Vanaf 1988 werd het project door de Zweedse overheid en marktpartijen gesubsidieerd om SICStus Prolog voor industriële toepassingen geschikt te maken, wat in 1991 resulteerde in versie 3.
In 1998 nam SICStus het bedrijf Quintus over en kondigde een "Grand Unified Compiler" aan (een toespeling op de Grand Unified Theory uit de natuurkunde), een fusie van Quintus- en SICStus-technologie, die echter niet van de grond kwam. Pas in 2007 resulteerden de inspanningen in versie 4 en 4.1 in 2009. SICStus is de grootste leverancier van Prolog-compilers en de innovaties op het gebied van parallellisatie en schaalbaarheid gelden als richtinggevend.Prolog-vergelijkingssite, Frank Bergmann SWI-Prolog, bijvoorbeeld, implementeert belangrijke delen van de Quintus/SICStus-specificatie.SWI-Prolog website
Standaardisering De eerste pogingen de taal te standaardiseren dateren uit 1985, toen de AFNOR de eerste Prologwerkgroep in het leven riep. In 1987 vormde de ISO een werkgroep (ISO/IEC JTC1/SC22 group WG17). Te laat, want verschillende leveranciers hadden hun eigen versies en klantenkring ontwikkeld en verdedigden hun dialecten furieus tegen al te drastische ingrepen.
De vele verhitte, soms bijtende debatten resulteerden uiteindelijk in de standaard ISO/IEC 13211-1 die in 1995 werd gepubliceerd. Het document standaardiseert niet alleen de syntaxis en formele semantiek van de taal, maar definieert ook unificatie, een centraal begrip, herdefinieert I/O-predicaten en introduceert een aantal constructies voor exception handling. Met name de herdefinitie van I/O-predicaten heeft kritiek opgeroepen omdat ze drastisch van de Edinburgh-implementaties verschillen en zodoende veel oude Prolog-programma's breken.
Ondanks ISO/IEC 13211-1 spreken Covington et al. in hun Coding guidelines voor Prolog van een gebrek aan een alomvattende standaard voor de taal; volgens hen is de kleine Prolog-gemeenschap gefragmenteerd en voornamelijk georganiseerd rond de verschillende implementaties, waarvan geen enkele dominant is.
Gebruik Omdat Prolog is gebaseerd op formele logica en met behulp van een inference engine zelfstandig conclusies kan trekken, is deze taal geschikt om kennis te modelleren en de mens te ondersteunen bij het trekken van conclusies uit gegevens. De taal is dan ook een veelgebruikt hulpmiddel voor het verwerken van natuurlijke taal, datamining, het interpreteren van de uitkomsten van metingen, modellen en simulaties en het bouwen van expertsystemen en onderzoek naar kunstmatige intelligentie.
Hoewel het gebruik van Prolog zich in eerste instantie beperkte tot de academische wereld, werden de implementaties gaandeweg stabiel genoeg zodat de taal in commercieel gebruik kon worden genomen. Begin jaren 90 had Prolog een "stabiele niche" verworven op de markt voor programmeertalen. Tot de gebruikers in de industriële wereld behoorden Boeing, dat met behulp van een expertsysteem handleidingen voor de assemblage van connectors met lijsten van benodigde gereedschappen, materialen, onderdelen en procedures samenstelde. Het National Center for Atmospheric Research in de VS gebruikte op Prolog gebaseerde software om kortetermijnweerberichten te genereren, in Boedapest hield een Prologapplicatie de concentraties van vervuilende stoffen in de gaten en adviseert over de te gebruiken extra filters als niveaus worden overstegen, en in het Verenigd Koninkrijk adviseerde een toepassing het personeel van een waterleidingbedrijf over optimaal gebruik van pompen, zodat de druk in het waterleidingsysteem gelijk verdeeld is. Oorspronkelijk in AI Expert, 1993. Ongeveer in dezelfde periode, echter, publiceerden onderzoekers die bij de ontwikkeling van logisch programmeren betrokken waren, een artikel waarin zij stelden dat dit paradigma "ondanks de theoretische voordelen" niet doorgebroken was: van de vijfhonderd applicaties op de publieke lijst "Prolog-1000" werden er slechts enkele door meer dan honderd mensen gebruikt.Zoltan Somogyi, Fergus Henderson, Thomas Conway en Richard O'Keefe (1995). Logic Programming for the Real World. ILPS'95 Postconference Workshop on Visions for the Future of Logic Programming. Een schatting uit 2003 hield het aantal Prolog-gebruikers op honderdduizenden.Russell en Norvig (2003:289).
De krachtige inference engine, de mogelijkheid tot backtracking ("terugkrabbelen") en de eenvoud en flexibiliteit van de taal maken haar zeer geschikt voor Rapid Prototyping, vooral omdat ingewikkelde regels relatief simpel kunnen worden uitgedrukt. Dit maakt haar ook zeer geschikt om taaluitingen, natuurlijk of anderszins te interpreteren en voort te brengen. Prolog wordt dan ook vaak voor dit doel ingezet. Dat de taal al beschikt over mechanismen om syntaxis te definiëren, zoals Definite Clause Grammars, maakt haar uitermate geschikt voor dit doel. Het internationale ruimtestation ISS heeft Clarissa,SICStus een in Prolog geschreven "fully voice operated procedure browser" om de astronauten te ondersteunen in de duizenden procedures die vereist zijn om het ruimtestation draaiend te houden.
Een meer recent voorbeeld is het gebruik in Watson, het computersysteem van IBM dat de Amerikaanse quiz Jeopardy! won. In het Nederlandse taalgebied is er het ontleedprogramma Alpino, dat in Prolog is geschreven.Alpino User Guide (n.d.). Rijksuniversiteit Groningen.
Invloed De toepassing van formele logica om kennis te modelleren heeft inmiddels vele verschillende talen en applicaties opgeleverd, die echter vaak tot de academische en industriële wereld beperkt blijven.
De technieken die voor Prolog zijn ontwikkeld zijn tegenwoordig tamelijk wijd verspreid en beperken zich niet tot eerste orde, maar richten zich ook op tweedeordelogica en automated theorem proving, het bewijzen van wiskundige stellingen door middel van software. Talen als Gödel implementeren dan ook vrij veel functionaliteit van Prolog.
In de jaren 80 van de vorige eeuw bracht Borland Turbo Prolog op de markt, dat nog steeds onder de naam Visual Prolog wordt gebruikt. Deze taal, die veel meer op hobbyisten dan op professionele gebruikers is gericht, verschilt echter sterk van andere dialecten. Het belangrijkste verschil is dat types in Turbo Prolog statisch worden geverifieerd en dus moeten worden gedeclareerd.
De programmeertaal Erlang werd oorspronkelijk geïmplementeerd in Prolog; de ontwerpers van de taal stellen dat Erlang, zonder Prolog en de geschiktheid daarvan voor rapid prototyping, niet bestaan zou hebben.J. L. Armstrong, S. R. Virding en M. C. Williams (1992). Use of Prolog for developing a new programming language. First Conference on the Practical Application of Prolog. Association for Logic Programming. Erlang was oorspronkelijk een dialect, of extensie, van Prolog en de twee talen hebben nog steeds oppervlakkige overeenkomsten (vooral in de syntaxis), maar Erlang werd later losgekoppeld van Prolog en ontwikkeld tot een functionele taal in plaats van een logische.J. L. Armstrong (1996). Erlang—a Survey of the Language and its Industrial Applications. Proc. INAP. Vol. 96. 1996.
Ook in de literatuur heeft de taal enige sporen nagelaten. In de roman Dirk Gently's Holistic Detective Agency van Douglas Adams speelt een op Prolog gebaseerd expertsysteem een rol dat voor ieder gewenst politiek doel automatisch een redenering verzint die het idee onderbouwt.
Datatypen Variabelen