Você está na página 1de 8

FUNDAÇÃO SANTO ANDRÉ

FACULDADE DE ENGENHARIA DA

COMPUTAÇÃO

CURSO DE ENGENHARIA DA COMPUTAÇÃO

LISTA DE EXERCÍCIOS –
PROLOG

Exercício 1) Digite no Prolog o seguinte programa:

progenitor(maria,carlos).
progenitor(joão,carlos).
progenitor(joão,antônia).
progenitor(antônia,eduardo).
progenitor(antônia,ana).
progenitor(ana,andré).
progenitor(carlos,luizinho).

Qual a resposta do Prolog às seguintes perguntas?

a. ?- progenitor(antônia,ana).
True.
b. ?- progenitor(eduardo,antônia).
False.
c. ?- progenitor(X,antônia).
X = joão.
d. ?- progenitor(joão,X).
X = antônia.
X = carlos.
e. ?- progenitor(X,Y).
X = maria,
Y = carlos
X = joão,
Y = carlos
X = joão,
Y = antônia
X = antônia,
Y = eduardo
X = antônia,
Y = ana
X = ana,
Y = andré
X = carlos,
Y = luizinho
f. ?- progenitor(X,carlos).
X = joão.
g. ?- progenitor(ana,X).
X = andré.
h. ?- progenitor(joão,X),progenitor(X,eduardo).
X = antônia.
i. ?- progenitor(joão,X),progenitor(X,Y),progenitor(Y,andré).
X = antônia,
Y = ana.

Exercício 2) Escreva a consulta em Prolog para as seguintes perguntas:

a. Quem são os avós de Eduardo?


?- progenitor(Y,eduardo),progenitor(X,Y).
(X = avós ).
X = joão,
Y = antônia
b. Quem são os netos de João?
?- progenitor(joão,Y),progenitor(Y,X).
(X = netos).
X = luizinho,
Y = carlos
X = eduardo,
Y = antônia
X = ana,
Y = antônia

c. Carlos e Antônia são irmãos?


?- progenitor(joão,antônia),progenitor(joão,carlos).
true

Quais as respectivas respostas do Prolog às consultas feitas acima?

Exercício 3) Escreva o seguinte programa em

Prolog

come(urso, peixe).
come(urso, raposa).
come(raposa,coelho).
come(coelho, grama).
come(peixe, peixinho).
come(veado,grama).

Qual a resposta do Prolog às seguintes perguntas?

a. ?- come(urso,X).
X = peixe
X = raposa
b. ?- come(X,grama).
X = coelho
X = veado
c. ?- come(X,Y).
X = urso,
Y = peixe
X = urso,
Y = raposa
X = raposa,
Y = coelho
X = coelho,
Y = grama
X = peixe,
Y = peixinho
X = veado,
Y = grama

d. ?- come(B,raposa).
B = urso

Exercício 4) Acrescente à base de dados do programa do

Exercício 1: mulher(maria).
mulher(antônia).
mulher(ana).
homem(carlos).
homem(joão).
homem(eduardo).
homem(andré).

Escreva a consulta em Prolog para as seguintes perguntas:

a. Maria é mulher?
?- mulher(maria).
true.
b. Qual o sexo de Maria?
Para que o prolog responda essa questão, seria necessário adicionar
mais dados à base de dados do programa.

Exercício 5) Acrescente à base de dados do programa do

Exercício 4: sexo(maria,feminino).
sexo(antônia,feminino).
sexo(ana,feminino).
sexo(carlos,masculino).
sexo(joão,masculino).
sexo(eduardo,masculino).
sexo(andré,masculino).

Escreva a consulta em Prolog para as seguintes perguntas:

a. Quem é mulher?
?- mulher(X).
true.
b. Qual o sexo de Maria?
?- sexo(maria,X).
feminino.

Exercício 6) Acrescente à base de dados do programa do Exercício 5 a

relação filho_a: filho_a(carlos,maria).


filho_a(carlos,joão).
filho_a(antônia,joão).
filho_a(ana,antônia).
Escreva a consulta em Prolog para as seguintes perguntas:

a. Quem são os filhos de João?


?- filho_a(X,joão).
X = carlos.
X = antônia
b. Eduardo é filho de Antônia?
?- filho_a(eduardo,antônia).
false.

Exercício 7) Ao invés de declarar fato por fato dos filhos, pode-se usar uma regra geral
para filhos, como abaixo. Acrescente-a ao programa Prolog obtido no Exercício 5:

filho_a(X,Y) :-
progenitor(Y,X).

Escreva a consulta em Prolog para as seguintes perguntas:

a. Eduardo é filho de Antônia?


?- filho_a(eduardo,antônia).
true.
b. Quem é filho de quem?
?- filho_a(X,Y).
X = carlos,
Y = maria
X = carlos,
Y = joão
X = antônia,
Y = joão
X = eduardo,
Y = antônia
X = ana,
Y = antônia
X = andré,
Y = ana
X = luizinho,
Y = carlos

Exercício 8) Inclua no programa Prolog obtido no Exercício 7) a relação

mãe abaixo: mãe(X,Y) :-


progenitor(X,Y
), mulher(X).

Escreva a consulta em Prolog para as seguintes perguntas:

a. Quem é mãe de Eduardo?


?- mãe(X,eduardo).
X = antônia.
b. Quem é mãe de Luizinho?
?- mãe(X,luizinho).
false.
c. Quem é mãe de quem?
?- mãe(X,Y).
X = maria,
Y = carlos
X = antônia,
Y = eduardo
X = antônia,
Y = ana
X = ana,
Y = andré

Exercício 9) Escreva e inclua no programa obtido no Exercício 8) a relação pai.

Escreva a consulta em Prolog para as seguintes perguntas:

a. Quem é pai de Luizinho?


?- pai(X,luizinho).
X = carlos
b. André tem pai?
?- pai(_,andré).
false
c. Quem são aqueles que não tem pai?
?- pai(_,X).
X = carlos
X = antônia
X = luizinho
Os que não possuem pai, seriam os diferentes de X.

Exercício 10) Crie um programa em Prolog com os seguintes fatos e

regras abaixo:estudioso(joão).
estudioso(maria).
gosta(maria,ler).
gosta(joão,futebol).
gosta(X,Y) :-
estudioso(Y).
aprende(X,Y) :-
estudioso(X), gosta(X,Y).

Escreva a consulta em Prolog para a seguinte pergunta:

a. O que João aprende?


?- aprende(joão,Y).
Y = futebol

Exercício 11) Inclua a relação avó ao programa obtido no

Exercício 9) avó(X,Z) :-
progenitor(X,Y
),
progenitor(Y,Z
), mulher(X).

Desenhe o grafo da relação.


Escreva a consulta em Prolog para a seguinte pergunta:

a. Quem é a avó de Luizinho?


?- avó(X,luizinho) .
X = maria
b. Quem são aqueles que tem avó?
?- avó(_,Y) .
Y = luizinho
Y = andré

Exercício 12) Inclua a relação irmão ao programa obtido no

Exercício 9) irmão(Y,Z) :- progenitor(X,Y),


progenitor(X,Z), homem(Y).

Desenhe o grafo da relação.

Escreva a consulta em Prolog para as seguintes perguntas:

a. Carlos é irmão de Antônia?


?- irmão (carlos,antônia).
true
b. Carlos é irmão dele mesmo?
?- irmão (carlos,carlos).
true

Exercício 13) Resolvendo o problema de irmão de si mesmo. Inclua na relação


irmão vista no exercício anterior:
not(Y = Z).

Qual a resposta do Prolog para a pergunta: Carlos é irmão dele mesmo?


false

Exercício 16) [Operadores lógicos] Crie um programa em Prolog com os


seguintes fatos e regras abaixo:

presidiu(lula, 2003, 2010).


presidiu(itamar, 1993, 1994).
presidiu(collor, 1990, 1992).
presidiu(dilma, 2011, 2013).
presidiu(figueiredo, 1979, 1984).
presidiu(castelo_branco, 1964, 1984).
presidiu(getulio, 1930, 1945).
presidiu(deodoro_fonseca, 1889,
1891). presidente(X,Y) :-
presidiu(X,A,
B), Y >= A,
Y =< B.

Quais são as respectivas respostas do Prolog para as consultas abaixo?

a. ?- presidente(X, 1900).
false
b. ?- presidente(getulio,1940).
true

Exercício 17) [operador is] Quais são as respectivas respostas do Prolog


para as consultas abaixo?

a. ?- X is Y * 20.
Arguments are not sufficiently instantiated
b. ?- 8 is 3+5.
true
c. ?- X is Y//2, Y=11.
Arguments are not sufficiently instantiated
d. ?- X=12, Y=X//2.
X = 12,
Y = 12//2
e. ?- X=11, Y is X//2.
X = 11,
Y=5

Exercício 18) Digite o programa Prolog abaixo:

população(brasil,18
0). população(eua,
250).
população(china,90
0). área(brasil,8).
área(eua,8).
área(china,10).
densidade(X,Y) :-
população(X,
P), área(X,A),
Y is P/A.

Escreva a consulta em Prolog para as seguintes perguntas:

a. Qual a densidade populacional do Brasil?


densidade(brasil,Y).
Y = 22.5
b. Qual a densidade populacional da França?
densidade(frança,Y).
false

Exercício 19) [listas] Escreva o seguinte programa em Prolog:


f([1,2,3]).
f([o, carro, é, [muito, potente]]).

Quais são as respectivas respostas do Prolog para as consultas

abaixo?

a. ?- f([X|Y]).
X = 1,
Y = [2, 3]
X = o,
Y = [carro, é, [muito, potente]]
b. ?- [X,Y,Z] = [maria, ana, joão].
X = maria,
Y = ana,
Z = joão
c. ?- [casa|X] = [casa,grande].
X = [grande]

Exercício 20) [member] Quais são as respectivas respostas do Prolog para as


consultas abaixo?

a. ?- member(a, [a,b,c]).
true
b. ?- member([a,b],[c,[a,b],d]).
true
c. ?- member(a,[[a],b,c]).
false

Exercício 21) [recursão] Digite em Prolog o programa abaixo que

concatena listas. concatena([],L,L).


concatena(L,[],L).
concatena([X,L1],L2,[X|L3]
) :- concatena(L1,L2,L3).

Quais são as respectivas respostas do Prolog para as consultas abaixo?

a. ?- concatena([a,b],[c],L).
false
b. ?- concatena([a],[a,b,c],L).
false

Exercício 22) Digite o em Prolog o programa abaixo que exclui um elemento de

uma lista. exclui(X,[X|Corpo],Corpo).


exclui(X, [Y|Corpo], [Y,C]) :-
exclui(X,Corpo,C).

Quais são as respectivas respostas do Prolog para as consultas abaixo?

a. ?- exclui(b,[a,b,c],R).
R = [a, [c]]
b. ?- exclui([a],[[a],b,c],R).
R = [b, c]

Você também pode gostar