Skip to content

Instantly share code, notes, and snippets.

@hereismari
Created July 29, 2018 00:33
Show Gist options
  • Save hereismari/14821c6c757fc66d8ab193c02092e6f8 to your computer and use it in GitHub Desktop.
Save hereismari/14821c6c757fc66d8ab193c02092e6f8 to your computer and use it in GitHub Desktop.
% funcao auxiliar que corta uma palavra adequadamente para flexiona-la
reduzir(VERBO, VERBO_REDUZIDO, N) :-
% tamanho do verbo eh TAM_VERBO
string_length(VERBO, TAM_VERBO),
% devemos retirar as ultimas N letras do verbo
FIM_VERBO is TAM_VERBO-N,
% o resultado eh guardado em VERBO_REDUZIDO
sub_atom(VERBO, 0, FIM_VERBO, _, VERBO_REDUZIDO).
% EU
flexionar('eu', VERBO, VERBO_FLEXIONADO) :-
% sao removidas as ultimas duas letras do verbo
reduzir(VERBO, VERBO_REDUZIDO, 2),
% adicionamos 'o' ao final de VERBO_REDUZIDO e resultado guardado em VERBO_FLEXIONADO
atom_concat(VERBO_REDUZIDO, 'o', VERBO_FLEXIONADO).
% TU
flexionar('tu', VERBO, VERBO_FLEXIONADO) :-
% flexao de ele concatenada com 's'
flexionar('ele', VERBO, VERBO_REDUZIDO), atom_concat(VERBO_REDUZIDO, 's', VERBO_FLEXIONADO).
% ELE
flexionar('ele', VERBO, VERBO_FLEXIONADO) :-
% basta remover a ultima letra do verbo
reduzir(VERBO, VERBO_FLEXIONADO, 1).
% NOS
flexionar('nós', VERBO, VERBO_FLEXIONADO) :-
% flexao de ele contanada com 'mos'
flexionar('ele', VERBO, VERBO_REDUZIDO),
atom_concat(VERBO_REDUZIDO, 'mos', VERBO_FLEXIONADO).
% VOS
flexionar('vós', VERBO, VERBO_FLEXIONADO) :-
% flexao de ele contanada com 'is'
flexionar('ele', VERBO, VERBO_REDUZIDO),
atom_concat(VERBO_REDUZIDO, 'is', VERBO_FLEXIONADO).
% ELES
flexionar('eles', VERBO, VERBO_FLEXIONADO) :-
% flexao de ele contanada com 'm'
flexionar('ele', VERBO, VERBO_REDUZIDO),
atom_concat(VERBO_REDUZIDO, 'm', VERBO_FLEXIONADO).
% Flexiona o verbo para todas as pessoas
flexionar(VERBO, FLEXOES) :-
findall([PESSOA|VERBO_FLEXIONADO], flexionar(PESSOA, VERBO, VERBO_FLEXIONADO), FLEXOES).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment