Prolog (programmeringssprog)

Prolog
Sprog klasse Logisk programmering
Dukkede op i 1972
Forfatter Alain Colmeroe
Filtypenavn _ .pl, .proeller.P
Større implementeringer 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
Blev påvirket planlægger
påvirket Visual Prolog , Mercury , Oz , Erlang , Strand , KL0 , KL1 , Datalog

Prolog ( eng.  Prolog ) er et logisk programmeringssprog og system baseret på prædikatsproget i den matematiske logik af Horns ledsætninger , som er en delmængde af førsteordens prædikatlogik .

Sproget er centreret omkring et lille sæt kernemekanismer, herunder mønstermatching , trærepræsentation af datastrukturer og automatisk tilbagesporing. Velegnet til at løse problemer, hvor objekter (især strukturerede objekter) og relationerne mellem dem overvejes. Prolog, på grund af dets særegenheder, bruges inden for kunstig intelligens, computerlingvistik og ikke-numerisk programmering generelt. I nogle tilfælde gør implementeringen af ​​symbolske beregninger på andre standardsprog det nødvendigt at skabe en stor mængde kode, der er svær at forstå, mens implementeringen af ​​de samme algoritmer i Prolog giver et simpelt program, der nemt passer på én side .

Prolog er et deklarativt programmeringssprog : logikken i et program udtrykkes i form af relationer repræsenteret som fakta og regler. For at igangsætte beregninger rettes en særlig anmodning til videnbasen , hvortil det logiske programmeringssystem genererer sande og falske svar. For generaliserede forespørgsler med variabler som argumenter udsender det oprettede Prolog-system specifikke data for at bekræfte sandheden af ​​generaliserede oplysninger og inferensregler.

Med andre ord kan et prædikat defineres som en funktion , der kortlægger et sæt af vilkårlig natur til et sæt boolske værdier {ложно, истинно} . Prologprogrammets opgave er at bevise, om en given målsætning er en konsekvens af de givne fakta og regler.

Udvikling

Begyndelsen af ​​sprogets historie går tilbage til 1970'erne. [1] Da det er et deklarativt programmeringssprog , opfatter Prolog som et program en eller anden beskrivelse af en opgave eller vidensbaser og producerer selv en logisk konklusion, såvel som en søgen efter en løsning på problemer, ved hjælp af søgemekanismen med tilbagesporing og ensretning .

Interessen for prologen steg og faldt et par gange, begejstringen blev afløst af en kraftig afvisning. Interessen for Prolog som fremtidens sprog blev løftet til højeste niveau under udviklingen af ​​Japans nationale femte generations computerprogram i 1980'erne, hvor udviklerne håbede, at det med Prolog ville være muligt at formulere nye principper, der ville føre til højere computere, intelligensniveau.

Prolog-sproget i 1980'erne blev inkluderet i en række sovjetiske universitets- og skolelærebøger om datalogi for at studere elementerne i matematisk logik, principperne for logisk programmering og udformningen af ​​vidensbaser og ekspertsystemmodeller . Til dette formål blev pædagogiske russisksprogede tolke af Prolog implementeret på IBM PC'en og en række sovjetiske skolecomputere.

I Prolog beskrives fakta i form af logiske prædikater med konkrete værdier. Inferensreglerne er beskrevet af logiske prædikater med definitionen af ​​logiske slutningsregler i form af en liste over prædikater over vidensbaser og informationsbehandlingsprocedurer.

I øjeblikket fortsætter Prolog, på trods af gentagne pessimistiske prognoser, med at udvikle sig i forskellige lande og inkorporerer nye teknologier og koncepter, såvel som imperative programmeringsparadigmer . Især implementerer et af områderne for sprogudvikling (herunder i Rusland ) begrebet intelligente agenter .

Cross-platform

Prolog er blevet implementeret til næsten alle kendte operativsystemer (OS) og platforme (inklusive Java og .NET ). Operativsystemer inkluderer: mainframe OS , hele Unix -familien , Windows , OS til mobile platforme.

Arkitektur

Mange moderne implementeringer af sproget har en intern udvidelse på grund af OOP- arkitekturen. Ud over ikke- gratis løsninger er der også gratis implementeringer af Prolog. I 1996 blev ISO-standarden vedtaget , kaldet ISO / IEC JTC1 / SC22 / WG17.

Det grundlæggende princip for sproget er ækvivalensen af ​​repræsentationen af ​​programmet og data (deklarativitet), hvorfor sprogudsagn både er poster, der ligner poster i en database, og regler, der bærer måderne at behandle dem på. Kombinationen af ​​disse kvaliteter fører til, at efterhånden som Prolog-systemet fungerer, ophobes viden (både data og regler). Derfor betragtes Prolog-systemer som et naturligt miljø til at akkumulere en videnbase og lære elever og skolebørn principperne for logisk programmering.

Syntaks

De grundlæggende begreber i Prolog-sproget er fakta, slutningsregler og forespørgsler, der giver dig mulighed for at beskrive vidensbaser , slutningsprocedurer og beslutningstagning . Logisk programmering, som implementeret i Prologue, bruger kun én inferensregel, opløsning .

I Prolog er det indledende sæt af formler, for hvilke der søges et tomt opløsningsmiddel, repræsenteret i form af de såkaldte " Horn-sætninger ":

Bade

Et Prolog-program beskriver relationer defineret af klausuler. Som i ethvert andet symbolsk regnesprog er sætninger bygget op af termer, som igen er opdelt i atomer, tal, variabler og strukturer. Et atom er skrevet med et lille bogstav eller omgivet af anførselstegn, når et stort bogstav er påkrævet.

atom 'Atom'

Variabler med store bogstaver er forskellige fra variabler i proceduremæssige programmeringssprog, de er ikke forbundet med en specifik hukommelsesplacering, men tættere på en matematisk variabel.

X er 2 + 2.

Strukturer er samlinger af termer indesluttet i parentes, inklusive andre strukturer. En struktur er betegnet med et navn (funktion), der står foran parentesen.

bog ( 'Titel' , '2009' , 'Spb' , forfattere ( 'Første forfatter' , 'Anden forfatter' ) ).

Lister er en anden konstruktion, hvis elementer er omgivet af firkantede parenteser. Lister i Prolog er baseret på linkede lister .

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

Regler

Regler i Prolog er skrevet i form af slutningsregler med logiske konklusioner og en liste over logiske betingelser. I ren Prolog er sætninger begrænset til Horn-sætninger :

Konklusion : - Tilstand .

og læses således: "Overskriften er SAND, hvis kroppen er SAND." Brødteksten i reglen indeholder referencer til prædikater, som kaldes reglens mål.

Indbyggede prædikater ,/2 Betydning: En operator med to argumenter. Definerer en kombination af mål. ;/2 Operatøren definerer disjunktionen.

Fakta

Fakta i Prolog er beskrevet af logiske prædikater med konkrete værdier. Fakta i Prolog vidensbaser repræsenterer specifik information (viden). Generaliseret information og viden i Prolog-sproget er defineret af logiske slutningsregler (definitioner) og sæt af sådanne slutningsregler (definitioner) over specifikke fakta og generaliseret information. Sætninger med en tom krop kaldes fakta . Fakta eksempel:

Kat ( Ivan ).

Dette faktum svarer til reglen:

Kat ( Ivan ) : - SANDT .

Kritik

Prolog kritiseres først og fremmest for dets ufuldstændige deklarative karakter: det er næsten umuligt at skabe komplekse og praktisk nyttige Prolog-programmer i en fuldstændig deklarativ stil, programmøren er tvunget til at ty til proceduremæssige teknikker, hvilket fører til en kraftig stigning i kompleksiteten af ​​oprettelse og fejlretning af programmer, samt dårlig kontrollerbarhed af mellemresultater. [2]

En anden ofte kritiseret egenskab ved sproget er manglen på skrivning (mens Visual Prolog [3]  - en af ​​de objektorienterede udvidelser af sproget - implementerer stærk skrivning, hvilket dog reducerer fleksibiliteten i Prolog).

Sproget forudbestemmer rækkefølgen af ​​gennemgang af beslutningstræet "i dybden" og standardiserer operatorer, der giver dig mulighed for at gribe ind i denne proces (såsom cut- !eller branch- operatoren ->). Denne arkitektur gør det vanskeligt automatisk at parallelisere programmer, hvilket ville gøre det muligt at bruge flere processorer eller netværksknuder i søgningen efter en løsning.

Eksempler

hej verden

?- skriv ( 'Hej verden!' ), nl . hej verden ! sandt . ?-

bror

forælder ( "Tom" , "Jake" ). forælder ( "Janna" , "Jack" ). forælder ( "Tom" , "Tim" ). mand ( "Tom" ). mand ( "Tim" ). mand ( "Jake" ). kvinde ( "Janna" ). bror ( X , Y ):- forælder ( Z , X ), forælder ( Z , Y ), mand ( X ), mand ( Y ), X \ = Y.

Output: (Jake, Tim) (Tim, Jake)

Senior

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

Konklusioner: 1. Timothy er ældre end Ivan 2. Vasily er ældre end Peter 3. Ivan er den yngste; Vasily er den ældste; Timothy er ældre end Peter.

Se også

  • Lisp  er et funktionelt programmeringssprog.

Noter

  1. Prolog-sprogets historie (downlink) . Hentet 4. september 2004. Arkiveret fra originalen 25. november 2004. 
  2. Sebesta R.U. Grundlæggende begreber for programmeringssprog \u003d Begreber for programmeringssprog. - 5. udg. - M .: Williams , 2001. - ISBN 5-8459-0192-8 .
  3. Samt dens direkte forgænger Turbo Prolog

Litteratur

  • Anatoly Adamenko, Andrey Kuchukov. Logisk programmering og Visual Prolog (med CD). - Sankt Petersborg. : BHV-Petersburg , 2003. - 990 s. — ISBN 5-94157-156-9 .
  • Ivan Bratko. Kunstig intelligens algoritmer på sproget PROLOG = Prolog Programmering For Artificial Intelligence. - M. : Williams , 2004. - 640 s. - ISBN 0-201-40375-7 .
  • Karpov Yu.G. Teori om automater. - St. Petersborg , 2003. - 206 s. — ISBN 5-318-00537-3 .
  • Markov VN Moderne logisk programmering i Visual Prolog 7.5: lærebog. - Skt. Petersborg: BHV-Petersburg, 2016. - 544 s. — ISBN 978-5-9775-3487-1
  • Mallas J. Relationssprog Prolog og dens anvendelse. — M. : Nauka, 1990. — 464 s. — ISBN 5-02-014509-2 .
Standarder

Links