talk :- nl, write($Digite uma sentenca com um dos padroes abaixo:$), nl, write($______eh um(a)______.$), nl, write($um(a)______eh um(a)______.$), nl, write($______eh um(a)______?$), nl, nl, write($Digite stop. para sair.$), nl, nl, repeat, read_string(Sent), string_tokens(Sent, Lista), reacao1(Lista, Reacao), call(Reacao), Reacao = stop, !. artigo(um). artigo(uma). reacao1(X, Y) :- reacao(X, Y), !. reacao([X, eh, A, Y, '. '], ((retractall(NovoFato), assert(NovoFato)), write($Ok!$), nl)) :- artigo(A), NovoFato =.. [Y,X]. reacao([A1, X, eh, A2, Y, '. '], (retractall(Regra), assert(Regra), write($Ok!$), nl)) :- artigo(A1), artigo(A2), Cab =.. [Y,Z], Corpo =.. [X, Z], Regra = (Cab :- Corpo). reacao([X, eh, A, Y, '?'], ((call(Pergunta) -> write($Sim$); write($Nao sei$)), nl)) :- artigo(A), Pergunta =.. [Y,X]. reacao([stop,'. '],stop). reacao(_, (write($Padrao de sentenca nao reconhecido.$), nl)). stop.