-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexercicio1.pl
130 lines (101 loc) · 5.27 KB
/
exercicio1.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
%--------------------------------- - - - - - - - - - - - - - - -
% SIST. REPR. CONHECIMENTO E RACIOCINIO - MiEI/3
% Sistema de Representação de Conhecimento e Raciocínio com capacidade
% para caracterizar um universo de discurso na área da contratação pública
% para a realização de contratos para a prestação de serviços.
%--------------------------------- - - - - - - - - - - - - - - -
% SICStus PROLOG: Declaracoes iniciais
:- set_prolog_flag( discontiguous_warnings,off ).
:- set_prolog_flag( single_var_warnings,off ).
:- set_prolog_flag( unknown,fail ).
:- op( 900,xfy,'::' ).
:- dynamic '-'/1.
:- dynamic adjudicante/4.
:- dynamic adjudicataria/4.
:- dynamic contrato/12.
:- dynamic excecao/1.
:- dynamic nulointerdito/1.
%--------------------------------- - - - - - - - - - - - - - - -
% Carregar predicados do ficheiro no qual é guardado o estado
:- include('estado.pl').
:- include('invariantes.pl').
:- include('aux.pl').
:- include('e_involucao.pl').
%--------------------------------- - - - - - - - - - - - - - - -
% Pressuposto do Mundo Fechado
% para o predicado adjudicante e adjudicataria
-adjudicante(IdAd,Nome,NIF,Morada) :-
nao(adjudicante(IdAd,Nome,NIF,Morada)),
nao(excecao(adjudicante(IdAd,Nome,NIF,Morada))).
-adjudicataria(IdAda,Nome,NIF,Morada) :-
nao(adjudicataria(IdAda,Nome,NIF,Morada)),
nao(excecao(adjudicataria(IdAda,Nome,NIF,Morada))).
%--------------------------------- - - - - - - - - - - - - - - -
% Sistema de Inferência
%--------------------------------- - - - - - - - - - - - - - - -
% CHECK Extensao do meta-predicado demo: Questao,Resposta -> {V,F}
% Resposta = { verdadeiro,falso,desconhecido }
demo( Questao,verdadeiro ) :-
Questao.
demo( Questao,falso ) :-
-Questao.
demo( Questao,desconhecido ) :-
nao( Questao ),
nao( -Questao ).
%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% CHECK Extensao do meta-predicado demoLista: [Questao],[Resposta] -> {V,F,D}
% capaz de responder a várias questões em simultâneo
demoLista([],[]).
demoLista([Questao|Questoes],[Resposta|Respostas]) :- demo(Questao,Resposta),
demoLista(Questoes,Respostas).
%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% CHECK Extensao do predicado conjuncaoLista: [Questao],Resposta -> {V,F,D}
% capaz de fazer a conjunção de uma lista de questões
% produzindo um resultado final
conjuncaoLista([],Resposta).
conjuncaoLista([Questao],Resposta) :- demo(Questao,Resposta).
conjuncaoLista([Questao|Questoes], Resposta) :- demo(Questao, Resposta1),
conjuncaoLista(Questoes,Resposta2),
conjuncao(Resposta1,Resposta2,Resposta).
% CHECK Extensao do predicado disjuncaoLista: [Questao],Resposta -> {V,F,D}
% capaz de fazer a disjunção de uma lista de questões
% produzindo um resultado final
disjuncaoLista([],Resposta).
disjuncaoLista([Questao],Resposta) :- demo(Questao,Resposta).
disjuncaoLista([Questao|Questoes], Resposta) :- demo(Questao, Resposta1),
disjuncaoLista(Questoes,Resposta2),
disjuncao(Resposta1,Resposta2,Resposta).
%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% CHECK Extensao do predicado conjuncao_disjuncao: (Operador, Questao1, Questao2),Resposta -> {V,F,D}
% capaz de fazer a conjunção ou a disjunção de duas questões
% produzindo um resultado final
conjuncao_disjuncao(('OR',Questao1,Questao2),Resposta) :- conjuncao_disjuncao(Questao1,Resposta1), conjuncao_disjuncao(Questao2,Resposta2), disjuncao(Resposta1,Resposta2,Resposta).
conjuncao_disjuncao(('AND',Questao1,Questao2),Resposta) :- conjuncao_disjuncao(Questao1,Resposta1), conjuncao_disjuncao(Questao2,Resposta2), conjuncao(Resposta1,Resposta2,Resposta).
conjuncao_disjuncao(Questao,Resposta) :- demo(Questao,Resposta).
%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% CHECK Extensao do meta-predicado conjuncao_disjuncaoLista: [Questao], Resposta -> {V,F,D}
% capaz de fazer a conjunção e/ou disjunção de uma lista de questões
% produzindo um resultado final
conjuncao_disjuncaoLista([],verdadeiro).
conjuncao_disjuncaoLista([Questao],Resposta) :- demo(Questao,Resposta).
conjuncao_disjuncaoLista([Questao1,'AND'|Questoes],Resposta) :- demo(Questao1,Resposta1),
conjuncao_disjuncaoLista(Questoes,Resposta2),
conjuncao(Resposta1,Resposta2,Resposta).
conjuncao_disjuncaoLista([Questao1,'OR'|Questoes],Resposta) :- demo(Questao1,Resposta1),
conjuncao_disjuncaoLista(Questoes,Resposta2),
disjuncao(Resposta1,Resposta2,Resposta).
%- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% CHECK Extensao do predicado conjuncao: X,Y -> {V,F,D}
conjuncao(verdadeiro,verdadeiro,verdadeiro).
conjuncao(verdadeiro,desconhecido,desconhecido).
conjuncao(desconhecido,verdadeiro,desconhecido).
conjuncao(desconhecido,desconhecido,desconhecido).
conjuncao(falso,_,falso).
conjuncao(_,falso,falso).
% CHECK Extensao do predicado disjuncao: X,Y -> {V,F,D}
disjuncao(verdadeiro,_,verdadeiro).
disjuncao(_,verdadeiro,verdadeiro).
disjuncao(falso,falso,falso).
disjuncao(falso,desconhecido,desconhecido).
disjuncao(desconhecido,falso,desconhecido).
disjuncao(desconhecido,desconhecido,desconhecido).