Prolog (programozási nyelv)

Prológus
Nyelvóra Logikai programozás
Megjelent 1972
Szerző Alain Colmeroe
Fájlkiterjesztés _ .pl, .provagy.P
Főbb megvalósítások B-Prolog , Ciao , ECLiPSe , GNU Prolog , Logic Programming Associates , Poplog Prolog, P# , Quintus, SICStus , Strawberry , SWI- Prolog , tuProlog , XSB , YAP-Prolog
Dialektusok ISO Prolog, Edinburgh Prolog, Turbo Prolog, Visual Prolog
Befolyásolva tervező
befolyásolta Visual Prolog , Mercury , Oz , Erlang , Strand , KL0 , KL1 , Datalog

A Prolog ( eng.  Prolog ) egy logikai programozási nyelv és rendszer , amely a Horn-féle tagmondatok matematikai logikájának predikátumnyelvén alapul , amely az elsőrendű predikátumlogika egy részhalmaza .

A nyelv egy kis számú alapvető mechanizmus köré összpontosul, beleértve a mintaillesztést , az adatstruktúrák faábrázolását és az automatikus visszakövetést. Jól alkalmas olyan problémák megoldására, ahol az objektumokat (különösen a strukturált objektumokat) és a köztük lévő kapcsolatokat veszik figyelembe. A Prolog sajátosságai miatt a mesterséges intelligencia, a számítógépes nyelvészet és általában a nem numerikus programozás területén használatos. Egyes esetekben a szimbolikus számítások más szabványos nyelveken való végrehajtása nagy mennyiségű, nehezen érthető kód létrehozását teszi szükségessé, míg ugyanezen algoritmusok végrehajtása a Prologban egy egyszerű programot ad, amely könnyen elfér egy oldalon. .

A Prolog egy deklaratív programozási nyelv : a program logikáját tények és szabályok formájában reprezentált kapcsolatokban fejezik ki. A számítások elindításához külön kérés érkezik a tudásbázishoz , amelyre a logikai programozó rendszer igaz és hamis válaszokat generál. A változókat argumentumként tartalmazó általánosított lekérdezések esetén a létrehozott Prolog rendszer konkrét adatokat ad ki, hogy megerősítse az általánosított információk és a következtetési szabályok igazságtartalmát.

Más szavakkal, egy predikátum definiálható olyan függvényként , amely egy tetszőleges természetű halmazt logikai értékek {ложно, истинно} halmazára képez le . A prolog program feladata annak bizonyítása, hogy egy adott célkifejezés az adott tények és szabályok következménye-e.

Fejlesztés

A nyelv történetének kezdete az 1970-es évekre nyúlik vissza. [1] Deklaratív programozási nyelvként a Prolog egy feladat vagy tudásbázis leírását programként érzékeli, és maga is logikus következtetést, valamint a problémák megoldásának keresését eredményezi a visszalépéssel és egyesítéssel járó keresési mechanizmus segítségével .

A Prológ iránti érdeklődés néhányszor nőtt, esett, a lelkesedést erős elutasítás váltotta fel. A Prolog, mint a jövő nyelve iránti érdeklődés Japán nemzeti ötödik generációs számítógépes programjának fejlesztése során emelkedett a legmagasabbra az 1980-as években, amikor a fejlesztők abban reménykedtek, hogy a Prolog segítségével új alapelveket lehet majd megfogalmazni, amelyek magasabb szintre vezetnek. számítógépek.intelligencia szint.

A Prolog nyelv az 1980-as években számos szovjet számítástechnikai egyetemi és iskolai tankönyvben szerepelt a matematikai logika elemeinek, a logikai programozás elveinek, valamint a tudásbázisok és szakértői rendszermodellek tervezésének tanulmányozása céljából . Ebből a célból a Prolog oktatási orosz nyelvű tolmácsait telepítették az IBM PC-re és számos szovjet iskolai számítógépre.

A Prologban a tényeket konkrét értékekkel rendelkező logikai predikátumok formájában írják le. A következtetési szabályokat logikai predikátumok írják le, a logikai következtetési szabályok meghatározása a tudásbázisok és információfeldolgozási eljárások feletti predikátumok listája formájában.

Jelenleg a Prolog a többszöri pesszimista előrejelzések ellenére is folyamatosan fejlődik különböző országokban, és új technológiákat és koncepciókat, valamint elengedhetetlen programozási paradigmákat épít be . Különösen a nyelvfejlesztés egyik területe ( Oroszországban is) az intelligens ügynökök koncepcióját valósítja meg .

Cross-platform

A Prolog szinte minden ismert operációs rendszerre (OS) és platformra (beleértve a Java -t és a .NET -et is ) implementálva lett. Az operációs rendszerek a következők: mainframe OS , a teljes Unix család , Windows , OS mobilplatformokhoz.

Építészet

A nyelv számos modern megvalósítása rendelkezik belső kiterjesztéssel az OOP architektúra miatt. A nem ingyenes megoldások mellett a Prolog ingyenes implementációi is léteznek . 1996-ban elfogadták az ISO szabványt , melynek neve ISO / IEC JTC1 / SC22 / WG17.

A nyelv alapelve a program és az adatok ábrázolásának egyenértékűsége (deklarativitása), ezért a nyelvi állítások egyrészt rekordok, mint az adatbázis rekordjai, másrészt szabályok, amelyek a feldolgozás módjait hordozzák. Ezeknek a tulajdonságoknak a kombinációja vezet oda, hogy a Prolog rendszer működése során a tudás (adatok és szabályok) felhalmozódik. Ezért a Prolog rendszereket természetes környezetnek tekintik a tudásbázis felhalmozására, valamint a hallgatók és iskolások megtanítására a logikai programozás elveire.

Szintaxis

A Prolog nyelv alapfogalmai a tények, a következtetési szabályok és a lekérdezések, amelyek lehetővé teszik a tudásbázisok , a következtetési eljárások és a döntéshozatal leírását. A logikai programozás a Prologue-ban megvalósított módon csak egyetlen következtetési szabályt használ, a felbontást .

A Prologban a képlet kezdeti halmaza, amelyhez üres rezolválót keres, az úgynevezett " Horn-klauzulák " formájában jelenik meg:

Fürdők

A Prolog program a záradékokkal meghatározott kapcsolatokat írja le. Mint minden más szimbolikus számítástechnikai nyelvben, a mondatok kifejezésekből épülnek fel, amelyek viszont atomokra, számokra, változókra és struktúrákra oszlanak. Az atomot kisbetűvel írják, vagy idézőjelek közé kell tenni, ha nagybetűre van szükség.

atom "Atom"

A nagybetűs változók eltérnek a procedurális programozási nyelvek változóitól, nem egy adott memóriahelyhez kapcsolódnak, hanem közelebb állnak egy matematikai változóhoz.

X értéke 2 + 2.

A struktúrák zárójelben lévő kifejezések gyűjteményei, beleértve az egyéb szerkezeteket is. A szerkezetet a zárójelek előtt megjelenő név (funktor) jelöli.

könyv ( 'Cím' , '2009' , 'Spb' , szerzők ( 'Első szerző' , 'Második szerző' ) ).

A listák egy másik konstrukció, amelyek elemei szögletes zárójelben vannak. A Prolog listái linkelt listákon alapulnak .

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

Szabályok

A Prolog szabályai következtetési szabályok formájában vannak megírva, logikai következtetésekkel és logikai feltételek listájával. A tiszta Prologban a mondatok Horn -mondatokra korlátozódnak :

Következtetés : - Állapot .

és így olvashatók: "A cím IGAZ, ha a törzs IGAZ." A szabály törzse hivatkozásokat tartalmaz predikátumokra, amelyeket a szabály célpontjainak nevezünk.

Beépített predikátumok ,/2 Jelentése: két argumentummal rendelkező operátor. A célok összefüggését határozza meg. ;/2 Az operátor határozza meg a diszjunkciót.

Tények

A tényeket a Prologban konkrét értékekkel rendelkező logikai predikátumok írják le. A Prolog tudásbázisok tényei konkrét információkat (tudást) képviselnek. Az általánosított információkat és ismereteket a Prolog nyelvben logikai következtetési szabályok (definíciók) és ilyen következtetési szabályok (definíciók) halmazai határozzák meg konkrét tényekre és általánosított információkra vonatkozóan. Az üres testű mondatokat tényeknek nevezzük . Tény példa:

Macska ( Iván ).

Ez a tény egyenértékű a szabállyal:

Macska ( Iván ) : - IGAZ .

Kritika

A Prologot elsősorban hiányos deklaratív jellege miatt kritizálják: szinte lehetetlen bonyolult és gyakorlatilag hasznos Prolog programot teljesen deklaratív stílusban létrehozni, a programozó kénytelen procedurális technikákhoz folyamodni, ami a programozás meredek növekedéséhez vezet. a programok létrehozásának és hibakeresésének bonyolultsága, valamint a köztes eredmények rossz ellenőrizhetősége. [2]

A nyelv másik gyakran kritizált tulajdonsága a gépelés hiánya (míg a Visual Prolog [3]  - a nyelv egyik objektum-orientált kiterjesztése - erős gépelést valósít meg, ami azonban csökkenti a Prolog rugalmasságát).

A nyelv előre meghatározza a döntési fa bejárásának sorrendjét "mélységben", és szabványosítja azokat az operátorokat, amelyek lehetővé teszik a beavatkozást ebbe a folyamatba (például a vágás !vagy elágazás operátora ->). Ez az architektúra megnehezíti a programok automatikus párhuzamosítását, ami lehetővé teszi több processzor vagy hálózati csomópont használatát a megoldás keresésében.

Példák

helló világ

?- write ( 'Hello world!' ), nl . szia világ ! igaz . ?-

testvér

szülő ( "Tom" , "Jake" ). szülő ( "Janna" , "Jack" ). szülő ( "Tom" , "Tim" ). férfi ( "Tom" ). férfi ( "Tim" ). férfi ( "Jake" ). ( "Janna" ). testvér ( X , Y ):- szülő ( Z , X ), szülő ( Z , Y ), férfi ( X ), férfi ( Y ), X \ = Y.

Kimenet: (Jake, Tim) (Tim, Jake)

Senior

idősebb ( "Péter" , "Iván" ). idősebb ( "Vaszilij" , "Timofej" ). idősebb ( "Timofey" , "Péter" ). régebbi, mint ( X , Y ) : - régebbi, mint ( X , Z ), régebbi, mint ( Z , Y ). ? régebbi ( "Timofey" , V ). ? idősebb ( U , "Péter" ). ? régebbi ( U , V ).

Következtetések: 1. Timóteus idősebb Ivánnál 2. Vaszilij idősebb Péternél 3. Ivan a legfiatalabb; Vaszilij a legidősebb; Timóteus idősebb Péternél.

Lásd még

  • A Lisp  egy funkcionális programozási nyelv.

Jegyzetek

  1. A Prolog nyelv története (downlink) . Letöltve: 2004. szeptember 4. Az eredetiből archiválva : 2004. november 25.. 
  2. Sebesta R.U. A programozási nyelvek alapfogalmai\u003d A programozási nyelvek fogalmai. - 5. kiadás - M .: Williams , 2001. - ISBN 5-8459-0192-8 .
  3. Valamint közvetlen elődje, a Turbo Prolog

Irodalom

  • Anatolij Adamenko, Andrej Kucsukov. Logikai programozás és Visual Prolog (CD-vel). - Szentpétervár. : BHV-Petersburg , 2003. - 990 p. — ISBN 5-94157-156-9 .
  • Iván Bratko. Mesterséges intelligencia algoritmusok PROLOG = Prolog Programming For Artificial Intelligence nyelven. - M .: Williams , 2004. - 640 p. - ISBN 0-201-40375-7 .
  • Karpov Yu.G. Az automaták elmélete. - Szentpétervár , 2003. - 206 p. — ISBN 5-318-00537-3 .
  • Markov VN Modern logikai programozás Visual Prolog 7.5-ben: tankönyv. - Szentpétervár: BHV-Petersburg, 2016. - 544 p. — ISBN 978-5-9775-3487-1
  • Mallas J. Relációs nyelv Prolog és alkalmazása. — M. : Nauka, 1990. — 464 p. — ISBN 5-02-014509-2 .
Szabványok

Linkek