Universidade Federal de Uberlândia - FACOM
GSI010 – Programação Lógica
Exercícios de Revisão – 11/11/2015
Matrícula:
Nome:
Questão 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 pontos
Faça um predicado Prolog soma_maiores/3 que, dados uma lista L e um elemento X, determina a soma
dos elementos de L que são maiores que X. Escreva duas versões desse código
(a) (1 ponto) Sem acumuladores.
(b) (1 ponto) Com acumuladores.
As duas consultas deverão ser do tipo:
?- soma_maiores([8, 2, 3, 5, 1], 2, S).
S = 16.
Solução:
% Item a)
soma_maiores([],_,0). % caso base
soma_maiores([Ca|Co],X,S) :Ca > X,
soma_maiores(Co,X,S1),
S is Ca + S1.
% O próximo caso é necessário, pois, senão, ele interrompe a recursão.
soma_maiores([Ca|Co],X,S) :Ca =< X,
soma_maiores(Co,X,S). % Não faz nada, apenas ignora a cabeça.
% Item b)
soma_maiores_ac([],_,Ac,S) :- S = Ac.
soma_maiores_ac([Ca|Co], X, Ac, S) :Ca > X,
Ac1 is Ac + Ca,
soma_maiores_ac(Co,X,Ac1,S).
soma_maiores_ac([Ca|Co], X, Ac, S) :Ca =< X,
soma_maiores_ac(Co,X,Ac,S). % Não faz nada, apenas ignora a cabeça.
% Predicado fachada:
soma_maiores(L,X,S) :- soma_maiores_ac(L,X,0,S).
Questão 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 pontos
Considere o predicado maior/4 que considera três valores numéricos e devolve o maior entre eles.
Por exemplo:
?- maior (3,1,5,M).
M = 5.
Implemente três versões desse predicado:
(a) (1 ponto) Sem utilizar cortes;
(b) (1 ponto) Usando corte verde;
(c) (1 ponto) Usando corte vermelho.
GSI010
Exercícios de Revisão - Continuação
Solução:
% Item a)
maior(X,Y,Z,X) :- X >= Y, X >= Z.
maior(X,Y,Z,Y) :- Y >= Z.
maior(X,Y,Z,Z) :- X < Z, Y < Z.
% Item b)
maior(X,Y,Z,X) :- X >= Y, X >= Z, !.
maior(X,Y,Z,Y) :- Y >= Z, !.
maior(X,Y,Z,Z) :- X < Z, Y < Z.
% Item a)
maior(X,Y,Z,X) :- X >= Y, X >= Z, !.
maior(X,Y,Z,Y) :- Y >= Z, !.
maior(X,Y,Z,Z).
Página 2 de 2
11/11/2015
Download

Segundo Exercício Avaliativo