Пролог (език за програмиране)

Вижте пояснителната страница за други значения на Пролог.

Пролог (Prolog) е компютърен език за логическо програмиране. Името пролог е акроним от PROgramming in LOGic. Създаден е от Ален Колмерое, Филип Ръсел и Робърт Ковалски през 1972 г. като алтернатива на американско-доминираните Lisp програмни езици. Това е опит да се направи програмен език, който дава възможност да се използват логически изрази, вместо специални инструкции към компютъра. До някаква степен пролог е помощен на Planner (виж историята на Ковалски за ранното логическо програмиране). Пролог е богата колекция от структури от данни и мощна система за писане на потребителски приложения. Той притежава свои логически аспекти, възможности за интерпретиране, компактност и присъща модуларност.

За разлика от процедурните езици за програмиране като Pascal, PL/I и т.н., програмата, написана на пролог, дава на компютъра описание на проблема, като използва редица факти и правила, а след това го кара да намери всички възможни решения. Когато бива използван Pascal например, програмистът трябва да каже на компютъра как точно да изпълни задачата, докато ако се програмира на пролог, щом се опише какво трябва да се направи, системата на пролог сама организира начина на реализиране. Поради декларативния (а не процедурния) подход, добре известните източници на грешки в Pascal, Basic и т.н. – като напр. цикли, които изпълняват повече или по-малко от необходимите операции – са елиминирани от самото начало. Нещо повече, пролог учи програмиста как да направи добре структурирано описание на даден проблем. Освен това той може да се използва и като инструмент за писане на спецификации.

История

Пролог е резултат от дългогодишна изследователска работа. Първата официална версия на пролог е създадена в Университета на Марсилия от Ален Колмерое (Alain Colmerauer) в началото на 1970-те. Това е опит да се разработи език за програмиране, който да даде възможност да се описва логиката, вместо подробно да се описват инструкциите към компютъра.

Пролог се развива в областта на изкуствения интелект. Първоначално става популярен сред изследователите, занимаващи се с изкуствен интелект. Философията на това се крие в логическите и декларативни аспекти на пролог, който представлява фундаментално нов подход в компютърното програмиране, ставайки сериозен конкурент на LISP.

Области на приложение

Пролог е език за програмиране от най-високо ниво, с общо предназначение, широко използван днес. При изучаването му се набляга силно върху декларативността при изразяването на логическите връзки между обектите, отнасящи се към даден проблем, а не върху процедурните стъпки, необходими за решаването му. Системата взема решение за начина, по който да се реши проблема, включително и за сериите от инструкции, които компютърът трябва да изпълни, за да го реши. По-лесно е да се каже какво трябва да се направи и компютърът да бъде оставен да го направи. Тъй като главният критерий в съвременния комерсиален свят е бързината на изпълнението, пролог е идеалният език за моделиране. В неговата концепция е заложено използването на паралелни архитектури. Той решава проблемите чрез претърсване на база от знания (или по-точно, база данни), което може да бъде усъвършенствано до голяма степен, ако няколко процесора бъдат накарани да претърсват различни части от базата данни.

Пролог се използва в много компютърни програми за изкуствен интелект и в компютърната лингвистика (особено при обработка на естествени езици). Неговите синтаксис и семантика се считат за много прости и ясни (първоначалното му предназначение е било да служи като инструмент за компютърно грамотни лингвисти). В проекта Операционни системи от пето поколение (FGCS, System V) се използва вариант на пролог, наричан език-ядро (kernel language). Други важни приложения на пролог са експертните системи, които възпроизвеждат вземане на решение на ниво човек-експерт, и системите за управление на релационни бази данни.

Пролог се основава на предикатното смятане (по-точно на предикатното смятане от първи ред); той обаче е ограничен само до хорновите клаузи. Изпълнението на дадена програма на пролог всъщност е приложение на теорема, която се доказва чрез резолюция от първи ред. Основните методи са унификация, рекурсия и търсене с връщане назад.

Типове данни

Пролог не използва типове данни по начин, обичаен в класическите езици за програмиране. По-скоро може да се говори за лексикални елементи в пролог, а не за типове данни:

Атоми

Текстовите константи се въвеждат чрез т.нар. атоми. Атомът е низ от букви, цифри и долни тирета (_), който започва с малка буква. Ако е необходимо да се въведе атом, който не съдържа букви и цифри, той се загражда с апострофи (напр. '+' е атом, а + е оператор).

Числа

Повечето от реализациите на пролог не правят разлика между цели и реални числа.

Променливи

Променливите се обозначават с низ от букви, цифри и долни тирета (_), който започва с главна буква. В средата на пролог променливата не е контейнер, към който може да се присвояват стойности (за разлика от процедурните езици за програмиране). Нейното поведение е по-близко до това на шаблона, като то все повече се определя чрез унификация.

Така наречената анонимна променлива се обозначава като едно долно тире (_).

Термини

Термините са единственият начин, чрез който пролог може да представи сложни данни. Терминът се състои от заглавие, наричано също функтор (което трябва да бъде атом), и параметри (неограничени типове). Броят на параметрите, наричан arity е много важен. Даден термин се идентифицира по неговото заглавие и arity, писано обикновено като functor/arity.

Списъци

Списъкът не е самостоятелен тип данни, защото се дефинира чрез рекурсивна конструкция (с използване на термина '.'/2):

  1. атомът [] е празен списък
  2. ако L е списък и X е елемент, то терминът '.'(X, L) е списък. Първият елемент е X, след който следва съдържанието на L. Синтактичното съкращение е [X | L].

За удобство на програмистите, списъците могат да се изграждат и разрушават по различни начини:

  • изреждане на елементи: [abc, 1, f(x), Y, g(A,rst)]
  • начално задаване на един елемент: [abc | L1]
  • начално задаване на множество елементи: [abc, 1, f(x) | L2]
  • разширяване на термин: '.'(abc, '.'(1, '.'(f(x), '.'(Y, '.'(g(A,rst), [])))))

Низове

Низовете обикновено се пишат като последователност от символи, заградени с кавички. Вътрешно те често са представяни като списъци от ASCII-кодове.

Факти

Програмирането на пролог е много различно от това на процедурен език. В пролог се използва база данни, съдържаща факти и правила, върху която могат да се изпълняват заявки. Основната единица в пролог е предикатът, който е дефиниран като истина. Предикатът се състои от заглавие и определен брой аргументи, напр.:

cat(tom).

Тук 'cat' е заглавието, а 'tom' е аргументът. Ето няколко примера за заявки, които можете да направите към интерпретатора на пролог въз основа на този факт:

?- cat(tom).
     yes.
?- cat(X).
     X = tom;
     no.

Предикатите обикновено се дефинират така, че да изразят даден факт, който програмата знае за света. В повечето случаи използването на предикати изисква спазване на дадена конвенция. Напр., от следващите два варианта:

father(sally,pat).
father(pat,sally).

който би означавал, че Пат (Pat) е баща на Сали (Sally)? И в двата случая 'father' е заглавието, а 'sally' и 'pat' са аргументи. Обаче в първия случай Сали е първи аргумент, а във втория случай – Пат е първи аргумент (редът на аргументите има значение). Първият случай е пример за дефиниция, чийто ред е: сказуемо, допълнение, подлог, а вторият: сказуемо, подлог, допълнение. Понеже пролог не разбира английски, то за него и двата варианта са правилни. Обаче добрият стил на програмиране изисква в отделна програма да се спазва една и съща конвенция, така че да се избягва писане като:

father(pat,sally).
father(jessica,james).

Някои предикати са вградени в езика и позволяват на програмите на пролог да изпълняват рутинни действия (като входни/изходни операции, използване на графики и други начини на комуникация с операционната система). Предикатът write може да се използва за извеждане на екрана. Така например

 write('Hello')

ще изведе думата 'Hello' на екрана.

Правила

Вторият тип команди в пролог са правилата. Ето пример за правило:

light(on) :- switch(on).
    където „:-“ означава „ако“

Това правило означава, че light(on) е истина, ако switch(on) е истина. Правилата могат да използват също и променливи. Променливите започват с главна буква, докато константите започват с малка буква, напр.:

father(X,Y) :- parent(X,Y),male(Y).

Това означава: „ако някой е родител на някого и е мъж, той е баща“. Причината и следствието са в обратна последователност на тази, която обикновено се среща в логиката. В причината може да се поставят множество предикати, свързани със съюз и, напр.:

a,b,c :- d.

което е равно просто на три отделни правила:

a :- d.
b :- d.
c :- d.

Не са позволени правила като:

a;b :- c.

което означава „ако c, то a или b“. Това е поради ограничение за хорновите клаузи.

Примери

Ето и някои практически примера.

Операции със списъци

Проверка дали даден елемент е в списък:

in(X, [X|R]).
in(X, [Y,R]) :- in(X,R).

или

in(X, [X|_]).
in(X, [_,R]) :- in(X,R).

Намиране на последния елемент от списък:

last_element([X],X).
last_element([K|R],X) :- last_element(R,X).

Конкатенация на два списъка:

con([],L,L).
con([X|L1],L2, [X|L3]) :- con(L1,L2,L3).

Брой на елементите в списък:

list_length([],0).
list_length([K|R],N) :- list_length(R,M),
                        N is M + 1.

Изчисление на факториел

fak(0,1).
fak(N,X) :- M is N-1,
            fak(M,Y),
            X is N*Y.

Реализации

Външни препратки

Read other articles:

Kanō Jigorō嘉納 治五郎Kanō Jigorō, pendiri judo.Lahir(1860-10-28)28 Oktober 1860Prefektur Hyōgo, JepangMeninggal4 Mei 1938(1938-05-04) (umur 77)di atas kapal MV Hikawa MarupneumoniaGayaJudo, jujutsuGuruFukuda Hachinotsuke, Iso Masatomo, Iikubo TsunetoshiPeringkatJudo: pendiriTenjin Shin'yō-ryū: Menkyō kaidenSiswa TerkemukaTomita TsunejirōKeiko Fukuda [1] Kanō Jigorō (嘉納 治五郎code: ja is deprecated , 28 Oktober 1860 – 4 Mei 1938) adalah pend...

 

Artikel ini tidak memiliki referensi atau sumber tepercaya sehingga isinya tidak bisa dipastikan. Tolong bantu perbaiki artikel ini dengan menambahkan referensi yang layak. Tulisan tanpa sumber dapat dipertanyakan dan dihapus sewaktu-waktu.Cari sumber: José Maria Neves – berita · surat kabar · buku · cendekiawan · JSTOR José Maria Pereira Neves Perdana Menteri Tanjung VerdeMasa jabatan1 Februari 2001 – 22 April 2016PresidenAntónio Mascare...

 

Ini adalah nama Melayu; nama Ibrahim merupakan patronimik, bukan nama keluarga, dan tokoh ini dipanggil menggunakan nama depannya, Abdul Khalid. Yang Berhormat Tan Sri Dato' SeriAbdul Khalid IbrahimMP, ADUN, BEc (UM) MBA (Queensland) Menteri Besar SelangorMasa jabatan13 Maret 2008 – 22 September 2014Penguasa monarkiSharafuddin Idris Shah PendahuluKhir ToyoPenggantiAzmin AliAnggota Parlemen Malaysiadapil Bandar Tun RazakMasa jabatan8 Maret 2008 – 31 Juli 2022 PendahuluTan...

صورة من البوابة الرئيسية لويكبيديا تظهر الإصدارات اللغوية المختلفة مرتبة حسب عدد المقالات. فيما يلي قائمة بالإصدارات اللغوية لـويكيبيديا، والتي شملت 317 إصدارا لغويا مختلفا منهم 306 إصدارا نشطا؛ لمعرفة عدد المواضيع بكل إصدار راجع القائمة الرئيسية. أكواد إصدارات ويكيبيديا �...

 

Skadron Pendidikan 403Dibentuk-NegaraIndonesiaCabang TNI Angkatan UdaraTipe unitKomando PendidikanBagian dariWing Pendidikan 400/MatukjurMarkasLanud Adi Sumarmo, Kota SurakartaJulukanSkadik 403MotoPrayodana Ksatrya Sarwa DamanaSitus webwww.kodikau.mil.id Skadron Pendidikan 403 disingkat (Skadik 403) adalah Komando Pendidikan TNI Angkatan Udara yang berada di bawah kendali Wing Pendidikan 400/Matukjur Komando Pembinaan Doktrin, Pendidikan dan Latihan TNI Angkatan Udara, dan bertugas menyelengg...

 

Sporting event delegationSweden at the2022 World Athletics ChampionshipsFlag of SwedenWA codeSWEin Eugene, United States15 July 2022 (2022-07-15) – 24 July 2022 (2022-07-24)Competitors22 (11 men and 11 women)MedalsRanked 16th Gold 1 Silver 0 Bronze 2 Total 3 World Athletics Championships appearances (overview)197619801983198719911993199519971999200120032005200720092011201320152017201920222023← 2019 2023 → Sweden competed at the 2022 ...

Troubadour Perdigon memainkan alat musiknya. Troubadour (bahasa Prancis: [tʁubaduʁ]; bahasa Ositan: trobador, IPA: [tɾuβaˈðu]) adalah profesi penghibur yang menggubah dan menyanyikan puisi lirik dalam bahasa Occitan Kuno selama abad pertengahan (1100–1350). Secara etimologis, istilah troubadour merupakan istilah maskulin, sehingga troubadour perempuan disebut trobairitz. Tradisi troubadour dimulai di Occitania pada akhir abad ke-11 dan kemudian menyebar ke Italia dan Spa...

 

Change in optical rotation of a chiral substance due to interconversion of anomers In stereochemistry, mutarotation is the change in optical rotation of a chiral material in a solution due to a change in proportion of the two constituent anomers (i.e. the interconversion of their respective stereocenters) until equilibrium is reached. Cyclic sugars show mutarotation as α and β anomeric forms interconvert.[1] The optical rotation of the solution depends on the optical rotation of eac...

 

Japanese media franchise For other uses, see Kamen Rider (disambiguation). Kamen RiderA statue of Kamen Rider 1 outside of Bandai Corporate Headquarters in Taitō, TokyoCreated byShotaro IshinomoriIshimori ProductionsToei CompanyOriginal workKamen RiderOwnerIshimori ProductionsToei CompanyMBS/NET (1971–1975, up to Amazon)MBS/TBS (1975–1989, from Stronger up to Black RX)TV Asahi (2000–present)ADK (2000–present)Years1971–presentFilms and televisionFilm(s)See belowTelevision seriesSee ...

Railway line in Japan This article does not cite any sources. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Seto-Ōhashi Line – news · newspapers · books · scholar · JSTOR (January 2016) (Learn how and when to remove this message) Rapid train Marine Liner Rear cab view inside Great Seto Bridge Kibi Line Okayama Tsuyama Line Sanyo Shinkansen Sanyo/Hakubi Line Sany...

 

Genus of flowering plants Burdock redirects here. For other uses, see Burdock (disambiguation). Burdock Arctium tomentosum Scientific classification Kingdom: Plantae Clade: Tracheophytes Clade: Angiosperms Clade: Eudicots Clade: Asterids Order: Asterales Family: Asteraceae Subfamily: Carduoideae Tribe: Cardueae Subtribe: Arctiinae Genus: ArctiumL. 1753 not Lam. 1779 Synonyms[1][2] Anura (Juz.) Tschern. Arcium Rupr. Arcion Bubani Bardana Hill Hypacanthium Juz. Lappa Scop., nom....

 

British politician and Governor General of Canada Albert Grey redirects here. For other uses, see Albert Grey (disambiguation). The Right HonourableThe Earl GreyGCB GCMG GCVO PC9th Governor General of CanadaIn office10 December 1904 – 13 October 1911MonarchsEdward VIIGeorge VPrime MinisterCanadian  • Wilfrid Laurier  • Robert BordenBritish  • Arthur Balfour  • Henry Campbell-Bannerman  • H. H. AsquithPreced...

Period of history Part of a series on the History of Wales Chronology Timeline British Bibliography Prehistory Archaeology Roman conquest Anglesey In the Roman era Anglo-Welsh wars rebellions In the Middle Ages Early High Late Norman invasion settlement Edwardian conquest Glyndŵr rebellion Settlement in the Americas Early modern period Industrial revolution Modern history World Wars Welsh devolution Medieval kingdoms Brycheiniog Ceredigion Deheubarth Dyfed Ergyng Gwent Gwynedd Medieval histo...

 

This article's lead section may be too short to adequately summarize the key points. Please consider expanding the lead to provide an accessible overview of all important aspects of the article. (August 2021) Political party in Virginia Republican Party of Virginia ChairmanRich AndersonGovernor of VirginiaGlenn YoungkinLieutenant Governor of VirginiaWinsome SearsSenate Minority LeaderRyan McDougleHouse Minority LeaderTodd GilbertFounded1854 (1854)HeadquartersObenshain Center115 E. Gr...

 

تيكسوباكتين اعتبارات علاجية بيانات دوائية توافر حيوي Unknown ربط بروتيني Unknown استقلاب (أيض) الدواء Unknown عمر النصف الحيوي Unknown إخراج (فسلجة) Unknown معرّفات CAS 1613225-53-8 ك ع ت None بوب كيم CID 86341926 كيم سبايدر 32786764 المكون الفريد LC730GUE72  ChEBI CHEBI:84192  ChEMBL CHEMBL3977597  بيانات كيميائية الصيغة...

Charles-Henri Belgrand de Vaubois Claude-Henri Belgrand de Vaubois (1 October 1748 in Ville-sous-la-Ferté, Aube – 5 November 1839) was a French general during the French Revolutionary Wars and the Napoleonic Wars. He is best known for the surrender of Malta to the British in 1800. On 20 August 1808 he was created Comte de Belgrand de Vaubois. Later, his name was inscribed on the Arc de Triomphe (Arche Kléber) in Paris. Early life Vaubois was born at Clairvaux (now part of Ville-sous-la-Fe...

 

Taux de chômage dans les pays de l'Union européenne et de l'Association européenne de libre-échange en Mars 2017, selon Eurostat Les pays de l'Union européenne (et de l'Europe de manière plus générale) ont connu à partir des années 1970 des niveaux importants de chômage. La hausse a débuté à la suite des deux chocs pétroliers de 1973 et 1979. Si les États-Unis ont également connu une forte hausse du taux de chômage, surtout à partir des années 1970, ce taux est redescendu ...

 

King of Arsacid Armenia (r. 389–414) VramshapuhModern statue of Vramshapuh and Mesrop MashtotsKing of ArmeniaReign389–414[1]PredecessorKhosrov IVSuccessorShapur IVBorn340–343Died414IssueArtaxias IV (Artashir IV)HouseArsacidFatherVarasdates (Varazdat) Vramshapuh[2][a] (Armenian: Վռամշապուհ) was a noble of the Arsacid dynasty who served as the Sasanian client king of Armenia from 389 until his death in 414.[8] He is mainly remembered for presi...

Roman/Byzantine province (c. 341–7th Century) Provincia Augusta Euphratensisἐπαρχία ΕὑφρατησίαςProvince of the Byzantine Empirec. 341–7th CenturyDiocese of Orient circa 400, showing EuphratensisCapitalCyrrus or Hierapolis BambyceHistorical eraLate Antiquity• Established c. 341• Division of the empire by Theodosius I 395• Muslim conquest of the Levant 7th Century Succeeded by Rashidun Caliphate Today part ofSyriaTurkey Euphratensis (Latin for Euphra...

 

Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus. Cet article ne cite pas suffisamment ses sources (janvier 2009). Si vous disposez d'ouvrages ou d'articles de référence ou si vous connaissez des sites web de qualité traitant du thème abordé ici, merci de compléter l'article en donnant les références utiles à sa vérifiabilité et en les liant à la section « Notes et références ». En pratique : Quelles sources sont attendues ? C...