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.
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ů .
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.
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í.
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 “:
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 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 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 .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í.
Výstup: (Jake, Tim) (Tim, Jake)
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.
Programovací jazyky | |
---|---|
|
ISO | normy|
---|---|
| |
1 až 9999 |
|
10 000 až 19999 |
|
20 000+ | |
Viz také: Seznam článků, jejichž názvy začínají na „ISO“ |