Aula 9
Prolog
1 banco de conhecimentos?
pai(alberto,beatriz). pai(alberto,carlos). pai(alberto,denise). pai(carlos,everton). pai(carlos,fabio). pai(fabio,guilherme).
Perguntas (query)
?- pai(X,everton). ?- pai(carlos,Z). ?- pai(A,B). ?- pai(A,B),pai(B,C).
2 regras
avo(A,B) :- pai(A,X),pai(X,B). irmao(A,B) :- pai(X,A),pai(X,B). % tem um problema
3 Exercicios
Assuma os fatos/predicados
filme(Nome,Ano). O filem Nome foi lancado no ano Ano ator(Filme, Pernsonagem, Ator). O ator Ator fez o papel do Personagem no Filme atriz(Filme, Personagem, Atriz). idem diretor(Filme, Diretor). Diretor dirigiu o Filme
- filmes lançados depois de 2010
- atores que dirigiram filmes
- atores ou atrizes que dirigiram filmes
- atrizes que dirigiram a si proprias
- filmes onde alberto e teresa foram co-estrelas
- atores ou atrizes que atuaram como eles mesmos num filme
4 OU
A ; B (A ; B) , C
?- (ator(F,Z,A) ; atriz(F,Z,A)) , diretor(F,A).
Duas regras funcionam como um OU delas
autodiretor(X) :- ator(F,Z,X), diretor(F,X). autodiretor(X) :- atriz(F,Z,X), diretor(F,X). autodiretor2(X) :- (ator(F,Z,X) ; atriz(F,H,X)) , diretor(F,X).
5 undersocore
Um underscore _ é uma variavel cujo valor deve ser descartado/não interessa.
autodiretor(X) :- ator(F,_,X), diretor(F,X). autodiretor(X) :- atriz(F,_,X), diretor(F,X). autodiretor2(X) :- (ator(F,_,X) ; atriz(F,_,X)) , diretor(F,X).
6 NAO
- filmes sem atrizes
- diretores que nunca foram atores
- atores que nao trabalham desde 2000, mas trabalharam antes de 2000.
?- filme(F,_), \+ atriz(F,_,_) ?- diretor(_,D), \+ator(_,_,D).
7 Diferente
A \= B ou \+ (A=B)
- Corrigir o predicado de irmao
8 Recursão
Definir o predicado antecessor
antecessor(A,B) :- pai(A,B). antecessor(A,B) :- pai(A,X), antecessor(X,B).
9 Exercicios
dado os predicados
pai(pai,filho/a). mae(mae,filho/a). masc(m) se m é masculino fem(f) se f é feminino
definir os predicados
- primo/a em primeiro grau
- irmaos/asinteiro (de mesmo pai e mesma mae independente do genero dos irmaos)
- meioirmaos/as (só de pai ou de mae mas nao de ambos)
- erro1(X) - se X um pai feminino ou uma mae masculina
- erro2(X) - se X é ao mesmo tempo pai e mae de alguem
- erro3(X) - se X é ao mesmo tempo masculino e feminino
- decmasc(A,B) se existe uma sequencia de pais de A para B e B é masculino (sequencia de herança do cromossomo Y).
- descfem(A,B) se existe um sequencia de mae de A para B (nao importa o genero de B) (sequencia de herança do dna mitocondrial).
Usando o banco de dados de filmes. https://swish.swi-prolog.org/example/movies.pl tem um banco de dados desse tipo de filmes (mas acho que a ordem dos argumentos de atriz e ator nao sao os mesmos que eu falei).
- atores ou atrizes que viraram diretores e nunca mais voltaram a atuar
- atores que trabalharam em um so filme
- atores que trabalharam por apenas 1 ano
- filme one mais de um ator faz o mesmo papel
- filme on