Documente Academic
Documente Profesional
Documente Cultură
[a, b, c] =
[a | [b, c] ] =
[a, b | [c] ] =
[a, b, c | [ ] ] =
[a | [b | [c] ] ] =
[a | [b | [c | [ ] ] ] ].
Considerînd următoarele fapte existente în
baza de cunoştinţe Prolog
pred([1, 2, 3, 4]).
pred([coco, sta, pe, [masa, alba]]).
se pot pune următoarele întrebări obţinînd răspunsurile
specificate:
?- pred([Prim | Rest]).
Prim = 1, Rest = [2, 3, 4];
Prim = coco, Rest = [sta, pe, [masa, alba]];
No
?- pred([ _, _ , _ , [ _ | Rest]])
Rest = [alba]
Un predicat util în multe aplicaţii este cel care testează
apartenenţa unui element la o listă şi care se defineşte astfel:
membru(Element, [Element | _ ]).
membru(Element, [ _ | RestulListei]) :-
membru(Element, RestListei).
Funcţionarea acestui scurt program Prolog poate fi urmărită
cerând răspunsul sistemului la următoarele scopuri:
?- membru(b, [a, b, c]).
yes
?- membru(X, [a, b, c]).
X = a;
X = b;
X = c;
No.
Operatori
semnificaţii evidente.
Structura programului Prolog
Databases
• Reprezintă o secţiune specială pentru declararea
unor fapte care se doresc a fi o parte a unei baze de
date dinamice.
PREDICATES
hello
CLAUSES
hello :- write(“hello”).
GOAL hello.
Sectiunea goal
Sectiunea goal conţine o clauză sau un şir de clauze
conectate logic (cu and si/sau or): goal complex
(compus din mai multe subgoal-uri legate logic).
domains clauses
name=symbol star(“Soare”).
predicates planet(“Pamint”).
star(name) planet(“Mars”).
planet(name) revolve(“Pamint”,”Soare”).
revolve(name,name) revolve(“Luna”,”Pamint”).
satellite(name,name) revolve(“Fobos”,”Mars”).
goal revolve(“Deimos”,”Mars”).
satellite(X,”Mars”), satellite(X,Y):-planet(Y),
write(X,”este satelit revolve(X,Y).
Mars”),nl.
Modificam scopul
Scopul intern Pentru un scop extern
Am inţeles că
Tipic, un program in limbajul Prolog nu este o secvenţă de
acţiuni ci o mulţime de fapte şi reguli care impreună duc la
nişte concluzii logice. Prolog este ceea ce numim un limbaj
declarativ.
Concluzii