versão MS Word

Propaganda
1.
:- op(900, xfy, ou).
:- op(800, xfy, e).
resolve(Premissa e Premissas) :resolve(Premissa),
resolve(Premissas).
resolve(Premissa ou Premissas) :resolve(Premissa)
;
resolve(Premissas).
resolve(Objectivo) :facto(Objectivo).
resolve(Objectivo) :findall(Corpo, regra(_,Objectivo, Corpo), Regras),
ordenaCustos(Regras, [], Ordenadas),
member(CorpoDaRegra, Ordenadas),
resolve(CorpoDaRegra).
resolve(Objectivo) :perguntavel(Objectivo), % verifica se o objectivo pode
ser
% avaliado perguntando ao utilizador
perguntaAoUtilizador(Objectivo).
ordenaCustos([], Regras, Ordenadas) :sort(Regras, RegrasOrdenadas),
removeCustos(RegrasOrdenadas, Ordenadas).
ordenaCustos([Corpo|Corpos], Regras, Ordenadas) :custoDaRegra(Corpo, Custo),
ordenaCustos(Corpos, [Custo-Corpo|Regras], Ordenadas).
custoDaRegra(Conjuncao1 ou Conjuncao2, Custo) :custoDaRegra(Conjuncao1, Custo1),
custoDaRegra(Conjuncao2, Custo2),
(
Custo1 > Custo2,
Custo is Custo2
;
Custo is Custo1
).
custoDaRegra(Conjuncao1 e Conjuncoes, Custo) :custoDaRegra(Conjuncao1, Custo1),
custoDaRegra(Conjuncoes, Custo2),
Custo is Custo1 +Custo2.
custoDaRegra(Premissa, Custo) :aval(Premissa, Custo).
removeCustos([], []).
removeCustos([_-Corpo|Regras], [Corpo|Mais]) :removeCustos(Regras, Mais).
2.
a)
Como na pergunta se pede apenas para codificar classes podemos
utilizar
a representacao: enquadramento(NomeDaClasse, SuperClasse,
ListaDeAtributos) e
utilizar o atomo nil para sinalizar a inexistencia de superclasse.
enquadramento(ave, nil, [tamanho=Tamanho, cor=Cor]).
enquadramento(passaro, ave, [tipoDeSementeQueCome=Semente]).
enquadramento(aveMarinha, ave, [tipoDePeixeQueCome=Peixe]).
enquadramento(pardal, passaro, [nome=Nome]).
enquadramento(pisco, passaro, [nome=Nome]).
Numa representacao mais abrangente, com instancias e classes, podemos
incluir
um argumento extra para indicar se se trata de uma classe ou de uma
instancia.
b)
propriedades(Classe, Propriedades) :enquadramento(Classe, nil, Propriedades).
propriedades(Classe, Propriedades) :enquadramento(Classe, SuperClasse, Props).
propriedades(SuperClasse, MaisProps),
append(Props, MaisProps, Propriedades).
3a Operadores:
colocar(X,Y): Pré-Condições: limpo(Y), segurar(X)
retirar(X,Y):
pegar(X):
largar(X):
Junte:
em(X,Y), braço_livre
Apague:
segurar(X), limpo(Y)
Pré-Condições: em(X,Y), braço_livre, limpo(X)
Junte:
segurar(X), limpo(Y)
Apague:
em(X,Y), braço_livre
Pré-Condições: na_mesa(X), limpo(X), braço_livre
Junte:
segurar(X), pos_livre(N+1) (ou pos_livre(Pos))
Apague:
na_mesa(X), braço_livre, pos_livre(N) (ou Pos)
Pré-Condições: segurar(X), pos_livre(N),N>0 (ou pos_livre(Pos))
Junte:
braço-livre, na_mesa(X), pos_livre(N-1)
Apague:
segurar(X), pos_livre(N) (ou pos_livre(Pos))
3b Plano: retirar(a,c), largar(a), retirar(b,d), colocar(b,c), pegar(d), colocar(d,a)
3c Tabela triangular:
em(a,c) retirar(a,c)
b_l
p_l(1)
seg(a)
em(b,d)
largar(a)
b_l
retirar(b,d)
na_m(a)
p_l(0)
li( c)
seg(b)
li(d)
colocar(b,c)
b_l
li(a)
seg(d)
em(b,c)
3d
pegar(d)
colocar(d,a)
p_l(1)
A1: se seg(X) então não b_l
A2: se em(X,Y) então não limpo(Y)
A3 (caso use Pos_livre(Pos)) se nada é dito então pos_livre(0)
4.
a)
member(X, conc(X, conc(Y, nil)))
b)
p(X) <- r(a,Y), q(Y), q(W)
em(d,a)
Download