Prolog (programovací jazyk)

Prolog
Jazyková třída Logické programování
Objevil se v 1972
Autor Alain Colmeroe
Přípona souboru .pl.pronebo _.P
Hlavní implementace B-Prolog , Ciao , ECLiPSe , GNU Prolog , Logic Programming Associates , Poplog Prolog, P# , Quintus, SICStus , Strawberry , SWI- Prolog , tuProlog , XSB , YAP-Prolog
Dialekty ISO Prolog, Edinburgh Prolog, Turbo Prolog, Visual Prolog
Byl ovlivněn plánovač
ovlivnil Visual Prolog , Mercury , Oz , Erlang , Strand , KL0 , KL1 , Datalog

Prolog ( angl.  Prolog ) je logický programovací jazyk a systém založený na predikátovém jazyce matematické logiky Hornových klauzulí , který je podmnožinou predikátové logiky prvního řádu .

Jazyk se soustředí kolem malé sady základních mechanismů, včetně porovnávání vzorů , stromové reprezentace datových struktur a automatického zpětného sledování. Dobře se hodí pro řešení problémů, kde jsou zvažovány objekty (zejména strukturované objekty) a vztahy mezi nimi. Prolog se pro své zvláštnosti používá v oblasti umělé inteligence, výpočetní lingvistiky a nenumerického programování obecně. V některých případech je při implementaci symbolických výpočtů v jiných standardních jazycích nutné vytvořit velké množství kódu, kterému je obtížné porozumět, zatímco implementace stejných algoritmů v Prologu poskytuje jednoduchý program, který se snadno vejde na jednu stránku. .

Prolog je deklarativní programovací jazyk : logika programu je vyjádřena pomocí vztahů reprezentovaných jako fakta a pravidla. Aby bylo možné zahájit výpočty, je na znalostní bázi vznesena speciální žádost , na kterou systém logického programování generuje pravdivé a nepravdivé odpovědi. Pro zobecněné dotazy s proměnnými jako argumenty vytváří vytvořený systém Prolog specifická data pro potvrzení pravdivosti zobecněných informací a odvozených pravidel.

Jinými slovy, predikát lze definovat jako funkci , která mapuje množinu libovolné povahy na množinu booleovských hodnot {ложно, истинно} . Úkolem programu prolog je prokázat, zda daný cíl je důsledkem daných skutečností a pravidel.

Vývoj

Počátek historie jazyka se datuje do 70. let 20. století. [1] Jako deklarativní programovací jazyk vnímá Prolog jako program určitý popis úkolu nebo znalostní báze a sám vytváří logický závěr, stejně jako hledání řešení problémů pomocí vyhledávacího mechanismu s backtrackingem a sjednocením .

Zájem o Prolog párkrát stoupal a klesal, nadšení vystřídalo rázné odmítnutí. Zájem o Prolog jako jazyk budoucnosti byl povýšen na nejvyšší úroveň během vývoje japonského národního počítačového programu páté generace v 80. letech, kdy vývojáři doufali, že s Prologem bude možné formulovat nové principy, které povedou k vyšší počítače.úroveň inteligence.

Jazyk Prolog byl v 80. letech zahrnut do řady sovětských univerzitních a školních učebnic informatiky pro studium prvků matematické logiky, principů logického programování a navrhování znalostních bází a modelů expertních systémů . Za tímto účelem byly na IBM PC a řadě sovětských školních počítačů implementovány výukové ruské tlumočníky Prologu.

V Prologu jsou fakta popsána ve formě logických predikátů s konkrétními hodnotami. Odvozovací pravidla jsou popsána logickými predikáty s definicí logických odvozovacích pravidel ve formě seznamu predikátů nad znalostními bázemi a procedurami zpracování informací.

V současné době se Prolog, navzdory opakovaným pesimistickým předpovědím, nadále vyvíjí v různých zemích a zahrnuje nové technologie a koncepty, stejně jako imperativní programovací paradigmata . Zejména jedna z oblastí vývoje jazyka (včetně Ruska ) implementuje koncept inteligentních agentů .

Multiplatformní

Prolog byl implementován pro téměř všechny známé operační systémy (OS) a platformy (včetně Javy a .NET ). Mezi operační systémy patří: mainframe OS , celá rodina Unix , Windows , OS pro mobilní platformy.

Architektura

Mnoho moderních implementací jazyka má vnitřní rozšíření díky architektuře OOP . Kromě nesvobodných řešení existují také bezplatné implementace Prologu. V roce 1996 byla přijata norma ISO s názvem ISO/IEC JTC1/SC22/WG17.

Základním principem jazyka je ekvivalence reprezentace programu a dat (deklarativnost), proto jsou jazykové příkazy jak záznamy, podobně jako záznamy v databázi, tak i pravidla, která nesou způsoby jejich zpracování. Kombinace těchto vlastností vede k tomu, že jak systém Prolog funguje, znalosti (jak data, tak pravidla) se hromadí. Proto jsou systémy Prolog považovány za přirozené prostředí pro shromažďování znalostní báze a pro výuku studentů a školáků principům logického programování.

Syntaxe

Základní pojmy v jazyce Prolog jsou fakta, pravidla odvození a dotazy, které vám umožňují popsat báze znalostí , postupy odvození a rozhodování. Logické programování, jak je implementováno v Prologue, používá pouze jedno odvozené pravidlo, rozlišení .

V Prologu je počáteční sada vzorců, pro kterou se hledá prázdný rozpouštědlo, reprezentována ve formě takzvaných „ klauzí o rohu “:

Vany

Program Prolog popisuje vztahy definované klauzulemi. Stejně jako v jakémkoli jiném symbolickém výpočetním jazyce jsou věty sestaveny z termínů, které jsou dále rozděleny na atomy, čísla, proměnné a struktury. Atom je psán malým písmenem nebo uzavřen v uvozovkách, pokud je vyžadováno velké písmeno.

atom 'Atom'

Proměnné s velkými písmeny se liší od proměnných v procedurálních programovacích jazycích, nejsou spojeny s konkrétním paměťovým místem, ale spíše blíže k matematické proměnné.

X je 2 + 2.

Struktury jsou kolekce termínů uzavřených v závorkách, včetně dalších struktur. Struktura je označena jménem (funktorem), které je uvedeno před závorkami.

kniha ( 'Název' , '2009' , 'Spb' , autoři ( 'První autor' , 'Druhý autor' ) ).

Další konstrukcí jsou seznamy, jejichž prvky jsou uzavřeny v hranatých závorkách. Seznamy v Prologu jsou založeny na propojených seznamech .

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

Pravidla

Pravidla v Prologu jsou psána ve formě odvozovacích pravidel s logickými závěry a seznamem logických podmínek. V čistém Prologu jsou věty omezeny na klauzule Horn :

Závěr : - Podmínka .

a čtou se takto: "Nadpis je PRAVDA, pokud je tělo PRAVDA." Tělo pravidla obsahuje odkazy na predikáty, které se nazývají cíle pravidla.

Vestavěné predikáty ,/2 Význam: Operátor se dvěma argumenty. Definuje spojení cílů. ;/2 Operátor definuje disjunkci.

Fakta

Fakta v Prologu jsou popsána logickými predikáty s konkrétními hodnotami. Fakta ve znalostních bázích Prologu představují konkrétní informace (znalosti). Zobecněné informace a znalosti v jazyce Prolog jsou definovány logickými odvozovacími pravidly (definicemi) a sadami takových odvozovacích pravidel (definic) nad konkrétními fakty a zobecněnými informacemi. Věty s prázdným tělem se nazývají fakta . Příklad faktu:

Kočka ( Ivan ).

Tato skutečnost je ekvivalentní pravidlu:

Kočka ( Ivan ) : - PRAVDA .

Kritika

Prologu je kritizována především jeho neúplná deklarativní povaha: je téměř nemožné vytvořit jakékoli složité a prakticky použitelné programy Prologu ve zcela deklarativním stylu, programátor je nucen uchýlit se k procedurálním technikám, což vede k prudkému nárůstu složitost vytváření a ladění programů a také špatná ovladatelnost mezivýsledků. [2]

Další často kritizovanou vlastností jazyka je absence typizace (zatímco Visual Prolog [3]  - jedno z objektově orientovaných rozšíření jazyka - implementuje silné psaní, které však snižuje flexibilitu Prologu).

Jazyk předurčuje pořadí procházení rozhodovacího stromu „do hloubky“ a standardizuje operátory, které vám umožňují zasahovat do tohoto procesu (jako je operátor řezu !nebo větvení ->). Tato architektura ztěžuje automatickou paralelizaci programů, což by umožnilo použití několika procesorů nebo síťových uzlů při hledání řešení.

Příklady

ahoj světe

?- napište ( 'Ahoj světe!' ), nl . ahoj světe ! pravda . ?-

bratr

rodič ( "Tom" , "Jake" ). rodič ( "Janna" , "Jack" ). rodič ( "Tom" , "Tim" ). muž ( "Tom" ). muž ( "Tim" ). muž ( "Jake" ). žena ( "Janna" ). bratr ( X , Y ):- rodič ( Z , X ), rodič ( Z , Y ), muž ( X ), muž ( Y ), X \= Y .

Výstup: (Jake, Tim) (Tim, Jake)

Senior

starší ( "Petr" , "Ivan" ). starší ( "Vasily" , "Timofey" ). starší ( "Timofey" , "Peter" ). starší než ( X , Y ) :- starší než ( X , Z ), starší než ( Z , Y ). ? starší ( "Timofey" , V ). ? starší ( U , "Petr" ). ? starší ( U , V ).

Závěry: 1. Timothy je starší než Ivan 2. Vasilij je starší než Petr 3. Ivan je nejmladší; Vasilij je nejstarší; Timothy je starší než Petr.

Viz také

  • Lisp  je funkční programovací jazyk.

Poznámky

  1. Historie jazyka Prolog (downlink) . Získáno 4. září 2004. Archivováno z originálu 25. listopadu 2004. 
  2. Sebesta R.U. Základní pojmy programovacích jazyků \u003d Koncepty programovacích jazyků. - 5. vyd. - M .: Williams , 2001. - ISBN 5-8459-0192-8 .
  3. Stejně jako jeho přímý předchůdce Turbo Prolog

Literatura

  • Anatolij Adamenko, Andrej Kučukov. Logické programování a Visual Prolog (s CD). - Petrohrad. : BHV-Petersburg , 2003. - 990 s. — ISBN 5-94157-156-9 .
  • Ivan Bratko. Algoritmy umělé inteligence v jazyce PROLOG = Prolog Programming For Artificial Intelligence. - M .: Williams , 2004. - 640 s. - ISBN 0-201-40375-7 .
  • Karpov Yu.G. Teorie automatů. - Petrohrad , 2003. - 206 s. — ISBN 5-318-00537-3 .
  • Markov VN Moderní logické programování ve Visual Prolog 7.5: učebnice. - Petrohrad: BHV-Petersburg, 2016. - 544 s. — ISBN 978-5-9775-3487-1
  • Mallas J. Relační jazyk Prolog a jeho aplikace. — M. : Nauka, 1990. — 464 s. — ISBN 5-02-014509-2 .
Normy

Odkazy