Prolog (programmeringsspråk)

Prolog
Språkklass Logisk programmering
Framträdde i 1972
Författare Alain Colmeroe
Filtillägg _ .pl, .proeller.P
Stora implementeringar B-Prolog , Ciao , ECLiPSe , GNU Prolog , Logic Programming Associates , Poplog Prolog, P# , Quintus, SICStus , Strawberry , SWI- Prolog , tuProlog , XSB , YAP-Prolog
Dialekter ISO Prolog, Edinburgh Prolog, Turbo Prolog, Visual Prolog
Blivit påverkad planerare
påverkas Visual Prolog , Mercury , Oz , Erlang , Strand , KL0 , KL1 , Datalog

Prolog ( eng.  Prolog ) är ett logiskt programmeringsspråk och system baserat på predikatspråket för den matematiska logiken i Horns satser , som är en delmängd av första ordningens predikatlogik .

Språket är centrerat kring en liten uppsättning kärnmekanismer, inklusive mönstermatchning , trädrepresentation av datastrukturer och automatisk bakåtspårning. Väl lämpad för att lösa problem där objekt (i synnerhet strukturerade objekt) och relationerna mellan dem beaktas. Prolog, på grund av dess egenheter, används inom området artificiell intelligens, beräkningslingvistik och icke-numerisk programmering i allmänhet. I vissa fall gör implementeringen av symboliska beräkningar på andra standardspråk det nödvändigt att skapa en stor mängd kod som är svår att förstå, medan implementeringen av samma algoritmer i Prolog ger ett enkelt program som enkelt får plats på en sida .

Prolog är ett deklarativt programmeringsspråk : logiken i ett program uttrycks i termer av relationer representerade som fakta och regler. För att initiera beräkningar görs en särskild begäran till kunskapsbasen , till vilken det logiska programmeringssystemet genererar sanna och falska svar. För generaliserade frågor med variabler som argument matar det skapade Prolog-systemet ut specifika data för att bekräfta sanningen av generaliserad information och slutledningsregler.

Med andra ord kan ett predikat definieras som en funktion som mappar en uppsättning av godtycklig natur till en uppsättning booleska värden {ложно, истинно} . Prologprogrammets uppgift är att bevisa om en given målsättning är en konsekvens av givna fakta och regler.

Utveckling

Början av språkets historia går tillbaka till 1970-talet. [1] Eftersom Prolog är ett deklarativt programmeringsspråk , uppfattar Prolog som ett program en viss beskrivning av en uppgift eller kunskapsbaser och producerar själv en logisk slutsats, såväl som ett sökande efter en lösning på problem, med hjälp av sökmekanismen med bakåtspårning och enande .

Intresset för prologen steg och sjönk några gånger, entusiasmen ersattes av ett starkt avslag. Intresset för Prolog som framtidens språk lyftes till högsta nivå under utvecklingen av Japans nationella femte generationens datorprogram på 1980-talet, då utvecklarna hoppades att det med Prolog skulle vara möjligt att formulera nya principer som skulle leda till högre datorer, intelligensnivå.

Prolog-språket på 1980-talet ingick i ett antal sovjetiska universitets- och skolböcker om datavetenskap för att studera elementen i matematisk logik, principerna för logisk programmering och utformningen av kunskapsbaser och expertsystemmodeller . För detta ändamål implementerades pedagogiska ryskspråkiga tolkar av Prolog på IBM PC och ett antal sovjetiska skoldatorer.

I Prolog beskrivs fakta i form av logiska predikat med konkreta värden. Slutledningsreglerna beskrivs av logiska predikat med definitionen av logiska slutledningsregler i form av en lista med predikat över kunskapsbaser och informationsbehandlingsprocedurer.

För närvarande fortsätter Prolog, trots upprepade pessimistiska prognoser, att utvecklas i olika länder och införlivar nya teknologier och koncept, såväl som imperativa programmeringsparadigm . I synnerhet implementerar ett av områdena för språkutveckling (inklusive i Ryssland ) konceptet intelligenta agenter .

Cross-platform

Prolog har implementerats för nästan alla kända operativsystem (OS) och plattformar (inklusive Java och .NET ). Operativsystem inkluderar: stordator OS , hela Unix -familjen , Windows , OS för mobila plattformar.

Arkitektur

Många moderna implementeringar av språket har en intern förlängning på grund av OOP- arkitekturen. Förutom icke- fria lösningar finns det även gratis implementeringar av Prolog. 1996 antogs ISO -standarden , kallad ISO/IEC JTC1/SC22/WG17.

Grundprincipen för språket är likvärdigheten mellan representationen av programmet och data (deklarativitet), vilket är anledningen till att språksatser både är poster, liknande poster i en databas, och regler som bär sätten att bearbeta dem. Kombinationen av dessa egenskaper leder till att allt eftersom Prolog-systemet fungerar samlas kunskap (både data och regler). Därför anses Prolog-system vara en naturlig miljö för att samla en kunskapsbas och lära elever och skolbarn principerna för logisk programmering.

Syntax

De grundläggande begreppen i Prolog-språket är fakta, slutledningsregler och frågor som låter dig beskriva kunskapsbaser, slutledningsprocedurer och beslutsfattande . Logisk programmering, som implementerad i Prologue, använder endast en slutledningsregel, resolution .

I Prolog representeras den initiala uppsättningen formler för vilka ett tomt resolvent söks i form av de så kallade " Horn-satserna ":

Baths

Ett Prolog-program beskriver relationer som definieras av satser. Som i alla andra symboliska datorspråk är meningar uppbyggda av termer, som i sin tur är uppdelade i atomer, tal, variabler och strukturer. En atom skrivs med en liten bokstav eller omges av citattecken när en stor bokstav krävs.

atom 'Atom'

Variabler med versaler skiljer sig från variabler i procedurprogrammeringsspråk, de är inte associerade med en specifik minnesplats, utan snarare närmare en matematisk variabel.

X är 2 + 2.

Strukturer är samlingar av termer inom parentes, inklusive andra strukturer. En struktur betecknas med ett namn (funktion) som visas före parentesen.

bok ( 'Titel' , '2009' , 'Spb' , författare ( 'Första författare' , 'Andra författare' ) ).

Listor är en annan konstruktion, vars element är inneslutna inom hakparenteser. Listor i Prolog är baserade på länkade listor .

Lista = [ a , b , [ c , d ], e ].

Regler

Regler i Prolog skrivs i form av slutledningsregler med logiska slutsatser och en lista med logiska villkor. I ren Prolog är meningar begränsade till Horn-satser :

Slutsats : - Skick .

och läses så här: "Rubriken är SANT om kroppen är SANT." Regelns brödtext innehåller referenser till predikat, som kallas regelns mål.

Inbyggda predikat ,/2 Betydelse: En operator med två argument. Definierar en kombination av mål. ;/2 Operatören definierar disjunktionen.

Fakta

Fakta i Prolog beskrivs av logiska predikat med konkreta värden. Fakta i Prolog kunskapsbaser representerar specifik information (kunskap). Generaliserad information och kunskap i prologspråket definieras av logiska slutledningsregler (definitioner) och uppsättningar av sådana slutledningsregler (definitioner) över specifika fakta och generaliserad information. Meningar med tom kropp kallas fakta . Faktaexempel:

Katt ( Ivan ).

Detta faktum motsvarar regeln:

Katt ( Ivan ) : - SANT .

Kritik

Prolog kritiseras först och främst för sin ofullständiga deklarativa karaktär: det är nästan omöjligt att skapa några komplexa och praktiskt användbara Prolog-program i en helt deklarativ stil, programmeraren tvingas tillgripa procedurtekniker, vilket leder till en kraftig ökning av komplexiteten i att skapa och felsöka program, samt dålig kontrollerbarhet av mellanliggande resultat. [2]

En annan ofta kritiserad egenskap hos språket är bristen på maskinskrivning (medan Visual Prolog [3]  – en av språkets objektorienterade förlängningar – implementerar stark typning, vilket dock minskar flexibiliteten hos Prolog).

Språket bestämmer ordningen för genomgång av beslutsträdet "i djupet" och standardiserar operatorer som gör att du kan ingripa i denna process (som klipp- !eller grenoperatören ->). Denna arkitektur gör det svårt att automatiskt parallellisera program, vilket skulle göra det möjligt att använda flera processorer eller nätverksnoder i sökandet efter en lösning.

Exempel

hej världen

?- skriv ( 'Hej världen!' ), nl . hej världen ! sant . ?-

bror

förälder ( "Tom" , "Jake" ). förälder ( "Janna" , "Jack" ). förälder ( "Tom" , "Tim" ). hane ( "Tom" ). manlig ( "Tim" ). hane ( "Jake" ). hona ( "Janna" ). bror ( X , Y ):- förälder ( Z , X ), förälder ( Z , Y ), hane ( X ), hane ( Y ), X \ = Y.

Utdata: (Jake, Tim) (Tim, Jake)

Senior

äldre ( "Peter" , "Ivan" ). äldre ( "Vasily" , "Timofey" ). äldre ( "Timofey" , "Peter" ). äldre än ( X , Y ) :- äldre än ( X , Z ), äldre än ( Z , Y ). ? äldre ( "Timofey" , V ). ? äldre ( U , "Peter" ). ? äldre ( U , V ).

Slutsatser: 1. Timothy är äldre än Ivan 2. Vasily är äldre än Peter 3. Ivan är den yngsta; Vasily är den äldsta; Timothy är äldre än Peter.

Se även

  • Lisp  är ett funktionellt programmeringsspråk.

Anteckningar

  1. Prolog-språkets historia (nedlänk) . Hämtad 4 september 2004. Arkiverad från originalet 25 november 2004. 
  2. Sebesta R.U. Grundläggande begrepp för programmeringsspråk \u003d Begrepp av programmeringsspråk. - 5:e uppl. - M .: Williams , 2001. - ISBN 5-8459-0192-8 .
  3. Samt dess direkta föregångare Turbo Prolog

Litteratur

  • Anatoly Adamenko, Andrey Kuchukov. Logisk programmering och Visual Prolog (med CD). - St Petersburg. : BHV-Petersburg , 2003. - 990 sid. — ISBN 5-94157-156-9 .
  • Ivan Bratko. Artificiell intelligens-algoritmer på språket PROLOG = Prolog-programmering för artificiell intelligens. - M. : Williams , 2004. - 640 sid. - ISBN 0-201-40375-7 .
  • Karpov Yu.G. Teori om automater. - St. Petersburg , 2003. - 206 sid. — ISBN 5-318-00537-3 .
  • Markov VN Modern logikprogrammering i Visual Prolog 7.5: lärobok. - St Petersburg: BHV-Petersburg, 2016. - 544 sid. — ISBN 978-5-9775-3487-1
  • Mallas J. Relationsspråk Prolog och dess tillämpning. — M. : Nauka, 1990. — 464 sid. — ISBN 5-02-014509-2 .
Standarder

Länkar