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.
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 .
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.
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.
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 ":
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 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 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 .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.
Output: (Jake, Tim) (Tim, Jake)
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.
Programmeringssprog | |
---|---|
|
ISO standarder | |
---|---|
| |
1 til 9999 |
|
10000 til 19999 |
|
20000+ | |
Se også: Liste over artikler, hvis titler begynder med "ISO" |