% ILP-503 (Prof. Dr. Silvio do Lago Pereira)

% ---------------------------------------------------------------------
% EXEMPLO 2
% ---------------------------------------------------------------------

frase(A,C) :- sujeito(A,B), predicado(B,C).
sujeito(A,C) :- artigo(A,B), substantivo(B,C).
predicado(A,D) :- verbo(A,B), artigo(B,C), substantivo(C,D).
artigo([o|A],A).
substantivo([gato|A],A).
substantivo([rato|A],A).
verbo([caçou|A],A).


% ---------------------------------------------------------------------
% EXEMPLO 5
% ---------------------------------------------------------------------

/*
frase --> sujeito, predicado.
sujeito --> artigo, substantivo.
predicado --> verbo, artigo, substantivo.
artigo --> [o].
substantivo --> [gato] | [rato].
verbo --> [caçou].
*/


% ---------------------------------------------------------------------
% EXEMPLO 6
% ---------------------------------------------------------------------

/*
frase --> sujeito, predicado.
sujeito --> artigo, substantivo.
predicado --> verbo, artigo, substantivo.
artigo --> [o] | [a].
substantivo --> [gato] | [rato] | [gata] | [rata].
verbo --> [caçou].
*/


% ---------------------------------------------------------------------
% EXEMPLO 7
% ---------------------------------------------------------------------

/*
frase --> sujeito, predicado.
sujeito --> artigo(G), substantivo(G).
predicado --> verbo, artigo(G), substantivo(G).
artigo(m) --> [o].
artigo(f) --> [a].
substantivo(m) --> [gato] | [rato].
substantivo(f) --> [gata] | [rata].
verbo --> [caçou].
*/


% ---------------------------------------------------------------------
% EXEMPLO 8
% ---------------------------------------------------------------------

/*
frase --> sujeito(N), predicado(N).
sujeito(N) --> artigo(G,N), substantivo(G,N).
predicado(N) --> verbo(N), artigo(G,M), substantivo(G,M).
artigo(m,s) --> [o].
artigo(m,p) --> [os].
artigo(f,s) --> [a].
artigo(f,p) --> [as].
substantivo(m,s) --> [gato]  | [rato].
substantivo(m,p) --> [gatos] | [ratos].
substantivo(f,s) --> [gata]  | [rata].
substantivo(f,p) --> [gatas] | [ratas].
verbo(s) --> [caçou].
verbo(p) --> [caçaram].
*/


% ---------------------------------------------------------------------
% EXEMPLO 9
% ---------------------------------------------------------------------

/*
s   --> sn, sv.
sn  --> det, n, adj.
sv  --> vi, adv.
sv  --> vt, adv, sn.
det --> [o].
n   --> [gato] | [rato].
adj --> [] | [gordo] | [magro].
vi  --> [caçou] | [dormiu].
vt  --> [caçou].
adv --> [] | [silenciosamente].
*/


% ---------------------------------------------------------------------
% EXEMPLO 10
% ---------------------------------------------------------------------

/*
s   --> sn, sv.
sn  --> det, n.
sv  --> v, sn.
det --> [o].
n   --> [gato] | [rato].
v   --> [caçou].
*/

% ---------------------------------------------------------------------
% EXEMPLO 11
% ---------------------------------------------------------------------

/*
s(s(A,B))   --> sn(A), sv(B).
sn(sn(A,B)) --> det(A), n(B).
sv(sv(A,B)) --> v(A), sn(B).
det(det(o)) --> [o].
n(n(X))     --> [X], { member(X,[gato,rato]) }.
v(v(caçou)) --> [caçou].
*/


% ---------------------------------------------------------------------
% EXEMPLO 13
% ---------------------------------------------------------------------

/*
p:s(s(A,B))   --> p:sn(A), p:sv(B).
p:sn(sn(A,B)) --> p:det(A), p:n(B).
p:sv(sv(A,B)) --> p:v(A), p:sn(B).
p:det(det(o)) --> [o].
p:n(n(X))     --> [X], { member(X,[gato, rato]) }.
p:v(v(caçou)) --> [caçou].

i:s(s(A,B))   --> i:sn(A), i:sv(B).
i:sn(sn(A,B)) --> i:det(A), i:n(B).
i:sv(sv(A,B)) --> i:v(A), i:sn(B).
i:det(det(o)) --> [the].
i:n(n(X))     --> [Y], { member(X:Y,[gato:cat, rato:mouse]) }.
i:v(v(caçou)) --> [hunted].

traduza(P,I) :- p:s(A,P,[]), i:s(A,I,[]).
*/
