Quest~oes 1. Escreva um predicado Prolog que calcule o mdc entre dois n'umeros inteiros. 2. Escreva um predicado em Prolog que verifica se uma lista 'e pal'indrome, ou seja, 'e igual a ela pr'opria olhada de tr'as para a frente. 3. Escreva um predicado Prolog que recebe uma lista e constr'oi uma outra com cada elemento duplicado. Exemplo: recebe [a,b,c] retorna [a,a,b,b,c,c]. 4. Considere a defini,c~ao abaixo: member(X,[X|_]) :- !. member(X,[_|Y]) :- member(X,Y). Diga qual ser'a a resposta `a pergunta ?- member(X,[a,b,c]), member(X,[c,b]). E se removermos o corte da defini,c~ao? A resposta mudaria? 5. Escreva um predicado Prolog intervalo(i,j) que imprime os n'umeros naturais de i a j inclusive. ---------------------------------------------------------------------- Solu,c~oes 1. mdc(X,0,Z) :- !, Z = X. mdc(X,Y,Z) :- R is X mod Y, mdc(Y,R,Z). 2. pali(X) :- reversa(X,X). reversa([],[]). reversa([X|Y],Z) :- reversa(Y,W), append(W,[X],Z). append([],L,L). append([X|Y],Z,[X|W]) :- append(Y,Z,W). 3. duplica([],[]). duplica([X|Y],[X,X|Z]) :- duplica(Y,Z). 4. Resposta ser'a no . Se remover o corte, resposta ser'a X = b e X = c na resatisfa,c~ao. 5. intervalo(I,J) :- I > J, !, fail. intervalo(I,J) :- write(I), nl, I1 is I+1, intervalo(I1,J). Se quiser que ao acabar responda "yes", basta remover o "fail".