Kas ir loģiskā programmēšana? Definīcija, principi un Prolog piemēri

Loģiskā programmēšana ir matemātiskās loģikas izmantošana datorprogrammu rakstīšanai, kur programmētājs apraksta zināšanas kā faktus un noteikumus, nevis soli‑pa‑solim algoritmu. Pastāv specializētas programmēšanas valodas, kurās lietotājs var tieši ievadīt loģiskos apgalvojumus. Iespējams, ka pazīstamākā no šīm valodām ir Prolog. Alonzo Čērčs izmantoja loģiskās programmēšanas veidu, ko šodien pazīst kā lambda kalkulu. Loģiskā programmēšana ir izmantota arī LISP.

Pamatprincipi

Loģiskās programmēšanas pamatā ir dažas vienkāršas, bet spēcīgas idejas:

  • Fakti — atsevišķi apgalvojumi, piemēram, ka "Ana ir māsa".
  • Noteikumi — loģiskas izrietošas attiecības: ja zināmi nosacījumi, tad izpildās secinājums (piemēram, "ja X ir māte Y, un Y ir persona Z, tad X ir vecāks Z").
  • Vaicājumi (queries) — lietotājs uzdod sistēmai jautājumus, un sistēma atrod risinājumus, kas apmierina faktus un noteikumus.
  • Saderība (unification) — mehānisms, kas salīdzina un "sapāro" mainīgos ar vērtībām, ļaujot atrast piemērotus aizvietojumus.
  • Atpakaļmeklēšana (backtracking) — metrika, kur sistēma mēģina dažādas alternatīvas un, neizdodas, atsaucas atpakaļ, lai izmēģinātu citu ceļu.
  • Noliegums kā neveiksme (negation as failure)vāja noliegums: ja no zināšanām nevar izsecināt apgalvojumu, tiek pieņemts tā noliegums.

Noliegums kā neveiksme (negation as failure)

Loģiskajā programmēšanā bieži izmanto tā dēvēto noliegumu kā neveiksmi vai vāju noliegumu: tas nozīmē, ka, ja no

{\displaystyle p} faktiem un noteikumiem nav iespējams iegūt kādu klauzulu p, sistēma pieņems, ka tās noliegums ir patiess.

Praktiski Prolog un līdzīgas valodas šo ideju īsteno ar operatoriem kā \+ vai not/1: izteikuma \+ p patiesums tiek pieņemts, ja mēģinājumu pārbaudīt p nevar apstiprināt. Šī pieeja ir noderīga daudziem uzdevumiem, bet jābūt piesardzīgiem, jo tā var dot maldinošus rezultātus, ja zināšanu bāze ir nepilnīga vai satur negarantētus pieņēmumus.

Prolog piemēri

Vienkāršs Prolog piemērs ar faktiem, noteikumiem un vaicājumiem.

% fakti māte(anna, iesa). tēvs(jānis, iesa).  % noteikums: vecāks(X, Y) ja māte vai tēvs vecāks(X, Y) :- māte(X, Y). vecāks(X, Y) :- tēvs(X, Y).  % vaicājumi, ko var uzdot: % ?- vecāks(anna, iesa).    % atbildēs "jā" % ?- vecāks(X, iesa).       % atbildēs X = anna ; X = jānis 

Negācijas piemērs:

% ja nav zināms, ka kāds ir bagāts, pieņemam, ka viņš nav bagāts bagāts(pēteris).   % ja vajadzīgs, var norādīt % ?- \+ bagāts(eskils).   % atgriezīs "jā" ja nav fakts par eskilu 

Pielietojumi un ierobežojumi

Loģiskā programmēšana ir bijusi populāra mākslīgā intelekta, ekspertu sistēmu, zināšanu attēlošanas un dabiskās valodas apstrādes laukos, jo tā ļauj viegli formulēt domāšanas noteikumus un veikt automātisku secināšanu. Taču:

  • dažos reālos uzdevumos (piem., liela mēroga datu apstrādē) imperatīvas valodas var būt efektīvākas;
  • negācija kā neveiksme var radīt kļūdainus secinājumus, ja zināšanu bāze ir nepilnīga;
  • komplekss meklēšanas koks var izraisīt būtisku skaitļošanas laika pieaugumu, ja nav efektīvu heuristiku.

Kopsavilkumā — loģiskā programmēšana piedāvā deklaratīvu pieeju, kur programma apraksta, kas jāzina, nevis


AlegsaOnline.com - 2020 / 2025 - License CC3