• Nenhum resultado encontrado

SWI-Prolog

N/A
N/A
Protected

Academic year: 2023

Share "SWI-Prolog "

Copied!
7
0
0

Texto

(1)

Noțiuni generale

Programare declarativă

O paradigmă de programare în care controlul fluxului de execuție este lăsat la latitudinea implementării limbajului, spre deosebire de programarea imperativă în care programul constă dintr-un șir de

instrucțiuni ce transmit sistemului ce se va executa pas cu pas.

http://en.wikipedia.org/wiki/Declarative_programming

Programare logică

O paradigmă de programare declarativă bazată pe logică. A rezolva o problemă utilizând programarea logică implică descrierea domeniului problemei sub forma unei mulțimi de propoziții (formule) și interogarea sa.

http://en.wikipedia.org/wiki/Logic_programming

Prolog

Cel mai cunoscut limbaj de programare logică este Prolog. Numele provine de la PROgramming in LOGic.

Programarea în Prolog constă din a construi o bază de cunoștințe, și a o interoga. Baza de cunoștințe este asemănătoare cu o bază de date, însă pe lângă date conține și reguli.

http://en.wikipedia.org/wiki/Prolog

SWI-Prolog

Una din cele mai populare implementări de Prolog, foarte activ dezvoltată și utilizată atât în mediul academic, cât și în producție.

http://www.swi-prolog.org/

(2)

Utilizarea SWI-Prolog

Când se deschide SWI-Prolog pe Windows este afișată o consolă, denumită și top level.

Creați un nou program Prolog, denumit lab1:

În acest editor vom construi baza de cunoștințe:

(3)

Introduceți următorul program, ce descrie predicatul indian/1:

indian(curry).

indian(dahl).

indian(tandoori).

indian(kurma).

Un predicat este identificat unic prin numele și aritatea sa, notat astfel: nume_predicat/aritate.

Editorul va evidenția folosind syntax highlighting cele patru clauze ale predicatului indian/1. Culoarea roșie a numelui predicatului semnifică faptul că acesta nu este utilizat.

O clauză (en. clause) care este de forma „nume_predicat(argumente).” se numește faptă (en. fact).

O regulă este de forma „nume_predicat(argumente) :- predicat1, predicat2, ... .” Operatorul :- se citește dacă (en. if), partea din stânga sa se numește cap (en. head), iar partea din dreapta corp (en. body).

(4)

Atenție! Întotdeauna o clauză se termină cu punct. În cazul în care acesta lipsește editorul ne va atenționa:

Adăugați la începutul programului această regulă:

likes(sam,Food) :- indian(Food), mild(Food).

Utilizați tasta TAB pentru a obține indentarea corectă a predicatului. Observați că am scris câte un predicat pe linie, inclusiv in corpul regulii.

Observații:

1. am utilizat predicatul indian în regula likes înainte de apariția sa în program 2. predicatul mild/1, care nu este definit, apare marcat cu roșu

(5)

Adăugați la finalul programului clauzele predicatului mild/1:

mild(dahl).

mild(tandoori).

mild(kurma).

Observați actualizarea culorilor în editor:

În continuare vom compila baza de cunoștințe:

Compilarea va conduce la încărcarea informațiilor în memoria mașinii virtuale a SWI-Prolog. Această operațiune se mai numeste și consultare (en. consult).

În urma compilării veți observa un mesaj de confirmare în bara de stare a editorului:

(6)

De asemenea în consolă veți observa un mesaj similar:

Acum putem interoga programul scris anterior:

Consola are ca prompter simbolul ?-, care semnifică faptul că așteaptă o interogare. În exemplele care urmează se va include acest prompt pentru a marca interogările, însă acesta nu este necesar a fi tastat.

Rezultatul unei interogări va fi adevărat sau fals.

(7)

Rulați următoarele interogări:

?- indian(kurma).

?- indian(sarmale).

?- mild(curry).

Prolog va utiliza baza de cunoștințe pentru a verifica adevărul afirmațiilor date ca interogare. Dacă găsește informațiile necesare demonstrării răspunsul va fi adevărat, altfel va fi fals. Acest mod de funcționare se numește ipoteza universului închis.

O interogare poate fi făcută cu mai mult de un singur predicat. De exemplu:

?- indian(tandoori), mild(tandoori).

?- indian(curry), mild(curry).

Operatorul virgulă are în Prolog semnificația de AND logic.

Să utilizăm acum și predicatul likes/2 pentru interogare:

?- likes(sam, dahl).

În definiția predicatului likes/2 observați că Food este scris cu literă mare, în schimb restul simbolurilor cu literă mică. Prin convenție, dacă numele unui simbol începe cu literă mare este o variabila, altfel este constantă.

Putem utiliza variabile și pentru interogări:

?- indian(X).

După rularea interogării de mai sus SWI-Prolog așteaptă:

Implicit Prolog va oferi prima soluție găsită. Pentru a obține mai multe soluții la interogare apăsați tasta

„;”, a cărei semnificatie este OR logic.

Referências

Documentos relacionados

Iniciamos o mecanismos proposto para reação de redução do NOx para N2 como mostrado no artigo de Jug e colaboradores[5] que emprega o agregado V2O7H4Ti33O66H2O17 segundo a reação