Operatori logici

prolog_logo
Cod Sursa PROLOG

% Tabela de adevar pentru expresii logice.
% Sa se defineasca predicatele and, or, nand, nor, xor, impl si equ (echivalenta)
% care reusesc sau esueaza in functie de operatori.
% Apoi sa se defineasca predicatul table care construieste
% tabela de adevar pentru o expresie logica data.
not(A) :- \+ A .
and(A,B) :- A, B.
or(A,_) :- A.
or(_,B) :- B.
equ(A,B) :- or( and(A,B), and( not(A),not(B) ) ).
xor(A,B) :- not(equ(A,B)).
nor(A,B) :- not(or(A,B)).
nand(A,B) :- not(and(A,B)).
impl(A,B) :- or(not(A),B).
% bind(X) :- da valori de adevar variabilei X
bind(true).
bind(fail).
table(A,B,Expr) :- bind(A), bind(B), do(A,B,Expr), fail.
do(A,B,_) :- write(A), write(‘ ‘), write(B), write(‘ ‘), fail.
do(_,_,Expr) :- Expr, !, write(true), nl.
do(_,_,_) :- write(fail), nl.

Interogări:

?- table(A,B,and(A,or(A,B))).
true true true
true fail true
fail true fail
fail fail fail
| ?- table(A,B,and(A,B)) .
true true true
true fail fail
fail true fail
fail fail fail
| ?- table(A,B,xor(A,B)) .
true true fail
true fail true
fail true true
fail fail fail
| ?- table(A,B,or(A,B)) .
true true true
true fail true
fail true true
fail fail fail
| ?- table(A,B,nor(A,B)) .
true true fail
true fail fail
fail true fail
fail fail true
| ?- table(A,B,equ(A,B)) .
true true true
true fail fail
fail true fail
fail fail true
| ?- table(A,B,impl(A,B)) .
true true true
true fail fail
fail true true
fail fail true

 

Leave a comment