% Aluno: Pedro Paulo Freire Oliveira
% Disciplina: Inteligencia Artificial 2017.2
% Professor: Herman Martin Gomes
%
%
% Código prolog que analisa quais palavras pertencem a casos proibitivos
% para suceder a crase do caso plural (às) com base na estuturação da
% palavra, reconhcida através da identificação de terminações, conforme
% o léxico da lingua portugesa.
%

% Relação auxiliar para identificar o caracter que finaliza a palavra.
%
last_char(S, X) :-
    name(S, N),
    reverse(N, [F|_]),
    name(X, [F]).

% Relação auxiliar para identificar os 2 ultimos caracteres que
% finalizam a palavra.
%
terminacao(Palavra, T) :-  string_length(Palavra, L), L > 1, substring(Palavra, L-1, 2, T).

% Terminacoes proibitivas: casos gerais em que as palavras que terminam
% nas respectivas letras são casos proibitivos, levadas em consideração
% também as exceções.
%
%
proibida(Palavra) :-  \+ last_char(Palavra, s), \+ excecao(Palavra).

proibida(Palavra) :-  terminacao(Palavra, ás), \+ excecao(Palavra).
proibida(Palavra) :-  terminacao(Palavra, es), \+ excecao(Palavra).
proibida(Palavra) :-  terminacao(Palavra, és), \+ excecao(Palavra).
proibida(Palavra) :-  terminacao(Palavra, ês), \+ excecao(Palavra).
proibida(Palavra) :-  terminacao(Palavra, is), \+ excecao(Palavra).
proibida(Palavra) :-  terminacao(Palavra, ns), \+ excecao(Palavra).
proibida(Palavra) :-  terminacao(Palavra, os), \+ excecao(Palavra).
proibida(Palavra) :-  terminacao(Palavra, ós), \+ excecao(Palavra).
proibida(Palavra) :-  terminacao(Palavra, ôs), \+ excecao(Palavra).
proibida(Palavra) :-  terminacao(Palavra, us), \+ excecao(Palavra).
proibida(bit).
proibida(agoras).
proibida(foras).



% Excecoes gerais
excecao(pás).
excecao(rés).
excecao(leis).
excecao(xerox).
excecao(xérox).
excecao(turnês).
excecao(motos).
excecao(fotos).
excecao(internets).

% Exceções em -m
excecao(nuvens).
excecao(Palavra) :-  string_length(Palavra, L), L > 5, substring(Palavra, L-4, 5, agens), Palavra \== pagens.


% Exceções: feminino singular terminadas em -ão.
excecao(mãos).
excecao(razões).
excecao(rebeliões).
excecao(lições).
excecao(tensões).
excecao(visões).
excecao(questões).
excecao(Palavra) :-  string_length(Palavra, L), L > 6, substring(Palavra, L-5, 6, nçãos).
excecao(Palavra) :-  string_length(Palavra, L), L > 6, substring(Palavra, L-5, 6, nções).
excecao(Palavra) :-  string_length(Palavra, L), L > 5, substring(Palavra, L-4, 5, ações), Palavra \== corações.
excecao(Palavra) :-  string_length(Palavra, L), L > 5, substring(Palavra, L-4, 5, ssão).
excecao(Palavra) :-  string_length(Palavra, L), L > 6, substring(Palavra, L-5, 6, dições).
excecao(Palavra) :-  string_length(Palavra, L), L > 5, substring(Palavra, L-4, 5, usões).
excecao(Palavra) :-  string_length(Palavra, L), L > 6, substring(Palavra, L-5, 6, ulsões).
excecao(Palavra) :-  string_length(Palavra, L), L > 5, substring(Palavra, L-4, 5, nsões).
excecao(Palavra) :-  string_length(Palavra, L), L > 7, substring(Palavra, L-6, 7, versões).
excecao(Palavra) :-  string_length(Palavra, L), L > 5, substring(Palavra, L-4, 5, eções), Palavra \== cabeções, Palavra \== tropeções.


% Exceções: feminino singular terminadas em -r
excecao(dores).
excecao(cores).
excecao(mulheres).
excecao(colheres).
excecao(chanceleres).
excecao(fêmures).


% Exceções: feminino singular terminadas em -l
excecao(tais).
excecao(vogais).
excecao(estatais).
excecao(federais).
excecao(cais).
excecao(cales).


% Exceções: feminino singular terminadas em -z
excecao(vozes).
excecao(vezes).
excecao(pazes).
excecao(nozes).
excecao(luzes).
excecao(fozes).
excecao(raízes).
excecao(cruzes).
excecao(nudezas).
excecao(mudezas).
excecao(matizes).
excecao(Palavra) :-  string_length(Palavra, L), L > 5, substring(Palavra, L-4, 5, idezes).
excecao(Palavra) :-  string_length(Palavra, L), L > 5, substring(Palavra, L-4, 5, trizes).


% Exceções: feminino singular terminadas em -e
excecao(mães).
excecao(lajes).
excecao(sedes).
excecao(fomes).
excecao(tosses).
excecao(peles).
excecao(fases).
excecao(teses).
excecao(fezes).
excecao(acnes).
excecao(sortes).
excecao(proles).
excecao(pebles).
excecao(partes).
excecao(mentes).
excecao(lentes).
excecao(fontes).
excecao(hastes).
excecao(frases).
excecao(foices).
excecao(noites).
excecao(febres).
excecao(estirpes).
excecao(couves).
excecao(alfaces).
excecao(chaves).
excecao(êstases).
excecao(árvores).
excecao(nômades).
excecao(metades).
excecao(gêneses).
excecao(queloides).
excecao(tietes).
excecao(raquetes).
excecao(faces).
excecao(bases).
excecao(crases).
excecao(naves).
excecao(raves).
excecao(paredes).
excecao(redes).
excecao(sementes).
excecao(tardes).
excecao(noites).
excecao(classes).
excecao(doente).
excecao(crentes).
excecao(Palavra) :-  string_length(Palavra, L), L > 5, substring(Palavra, L-4, 5, netes).
excecao(Palavra) :-  string_length(Palavra, L), L > 5, substring(Palavra, L-4, 5, dades).
excecao(Palavra) :-  string_length(Palavra, L), L > 5, substring(Palavra, L-4, 5, antes).
excecao(Palavra) :-  string_length(Palavra, L), L > 5, substring(Palavra, L-4, 5, entes).
excecao(Palavra) :-  string_length(Palavra, L), L > 5, substring(Palavra, L-4, 5, istas).
























