Enumerarea în prolog

Căutarea nelimitată poate deveni o sursă de ineficiență a programului, astfel încât uneori este necesar să o limitați sau să o excludeți cu totul. Pentru aceasta, proiectul de "cut-off" este oferit în Prolog.







Enumerarea în prolog

Relația dintre X și Y poate fi determinată folosind următoarele trei reguli:

Regula 1: dacă X <3, то Y = 0

Regula 2: dacă 3<= X и X <6, то Y = 2

Regula 3: dacă 6 <= X, то Y = 4

Pe Prolog, acest lucru poate fi exprimat cu ajutorul unei relații b (X, Y) după cum urmează:

f (X, 0): - X <3. % Правило 1

f (X, 2): - 3 =

f (X, 4): - 6 =

În acest program se presupune, desigur, că până la începerea calculului, f (X, Y) X este deja specificat de un anumit număr; acest lucru este necesar pentru a efectua operatori de comparație.

Prolog produce dovada conjuncției declarațiilor obiective de la stânga la dreapta. În acest caz, puteți să îndepliniți declarația țintă, care nu poate fi coordonată. Dacă se întâmplă acest lucru, atunci o schimbare spre stânga are loc până când se găsește o instrucțiune țintă care poate fi reconciliată sau toate instrucțiunile țintă anterioare sunt epuizate. Dacă nu există declarații țintă la stânga, atunci conjuncția cu instrucțiunile țintă nu poate fi coordonată. Cu toate acestea, dacă declarația țintă anterioară poate fi reconciliată din nou, Prolog reia procesul de dovedire a declarațiilor țintă de la stânga la dreapta, începând cu următoarea aprobare țintă. Procesul de deplasare spre stânga pentru a concilia declarația țintă și pentru a reveni la dreapta se numește mecanismul de returnare.

scrieți ("mai puțin de"), scrieți (Y).

scrieți ("mai mică decât"), scrieți (X).

Declarația țintă - mai puțin (5, 2). este egal cu capul primei instrucțiuni pentru X = 5 și Y = 2. Cu toate acestea, nu este posibil să convenim primul termen al conjuncției în corpul declarației X





Un astfel de proces de coordonare a aprobării țintă prin promovarea directă prin program este numit urmărire în viitor.

Clipping în prolog, tăiere.

O afirmație țintă specială este "!", Numită tăiere. Trunchierea se realizează după cum urmează: după coordonarea CU înainte de decupare, nu se iau în considerare toate ipotezele cu același predicat localizat după tăiere.

Eliminarea tăierii din program poate duce la o schimbare a sensului său declarativ. Dar există și cazuri în care întreruperea nu o afectează. Utilizarea tăieturilor din acest din urmă tip necesită mai puțină prudență și, prin urmare, astfel de tăieturi sunt uneori numite "tăieturi verzi". Din punctul de vedere al vizibilității programului, o astfel de tăiere este "nevinovată", iar utilizarea lor este perfect acceptabilă. Când citiți programul, le puteți ignora. Dimpotrivă, tăierea, care afectează sensul declarativ, se numește "roșu". Red clipping este un clipping care face programul greu de înțeles, și trebuie să fie folosit cu mare precauție.

Exemple care utilizează tăierea:

1) Calcularea valorii maxime

2) Afilierea articolului în listă

-adăugați (a, Lst1, Lst2), Lst1 = [b, v, c], scrieți (Lst2). % [a, b, v, c] Da.

-adăugați (a, Lst1, Lst2), Lst1 = [b, a, c], scrieți (Lst2).

Programatorul definește noi operatori introducând în program anumite tipuri de propoziții, care sunt uneori numite directive. Astfel de propoziții joacă rolul definițiilor noilor operatori. Definiția unui operator ar trebui să apară în program mai devreme decât orice expresie care utilizează această instrucțiune. De exemplu, declarația mamă poate fi definită printr-o directivă

- op (600, xfx, părinte).

O astfel de înregistrare îi spune lui Prolog că vrem să folosim "părintele" ca operator cu prioritate 600 și să tipăm "xfx", care reprezintă unul dintre tipurile operatorului infix. Forma specificatorului "xfx" indică faptul că operatorul desemnat cu "f" este situat între argumentele notate cu "x".

Există trei grupe de tipuri de operatori, notate de specificatori:

1) infix operatorii de trei tipuri: xfx xfy yfx

2) operatori de prefix de două tipuri: fx fy

3) operatorii postfix de două tipuri: xf yf

Specificatorii sunt aleși astfel încât să reflecte mai bine structura expresiei, în care "f" corespunde operatorului, iar "x" și "y" reprezintă argumentele sale.

Există o diferență între "x" și "y". Dacă argumentul este închis în paranteze sau nu are o structură (este un obiect simplu), atunci prioritatea lui este 0; dacă este una structurală, atunci prioritatea sa este egală cu prioritatea functorului său principal. Folosind "x", este indicat un argument al cărui prioritate trebuie să fie strict mai mare decât prioritatea operatorului (adică numărul său este strict mai mic decât numărul priorității operatorului); cu "y" se menționează argumentul, a cărui prioritate este mai mare sau egală cu prioritatea operatorului.

Predicatele tipice ale Prolog.

Predicate tipice - care permit determinarea tipului de care aparține obiectul.

1) var (X) - Acest obiectiv este reușit dacă X nu este în prezent o variabilă specifică.

2) nonvar (X) - Acest obiectiv este reușit dacă X este un alt termen decât o variabilă sau dacă X este o variabilă deja specificată.

3) atom (X) - Acest scop este adevărat dacă X este un atom.

4) integer (X) - Scopul este adevărat dacă X denotă un număr întreg.

5) atomic (X) - Scopul este adevărat dacă X este un întreg sau un atom.







Articole similare

Trimiteți-le prietenilor: