Enunciado: Implementação em Prolog
Este documento detalha as tarefas a serem implementadas no paradigma Lógico (Prolog).
Base de Dados (Fatos)
O arquivo de dados (dataset.pl) conterá fatos no seguinte formato:
% filme(ID, Titulo, Genero, Diretor, Ano, ClassificacaoMinima, Duracao)
filme(1, 'Matrix', 'Ficcao', 'Wachowski', 1999, 14, 136).
% usuario(ID, Nome, Idade)
usuario(1, 'Alice', 25).
% avaliacao(UsuarioID, FilmeID, Nota)
avaliacao(1, 1, 5).Fase 1: Consultas Básicas (Aquecimento)
Implemente predicados que utilizem findall para responder perguntas de negócio.
1.1 filmes_por_genero/2
- Objetivo: Listar títulos de um gênero. Exemplo:
?- filmes_por_genero('Ficcao', Lista).
Lista = ['Matrix', 'Inception', 'Avatar'].1.2 filmes_de_ano_superior/2
- Objetivo: Listar títulos lançados estritamente após um ano (AnoFilme > AnoRef). Exemplo:
?- filmes_de_ano_superior(2000, Lista).
Lista = ['Inception', 'Avatar'].1.3 notas_do_usuario/2
- Objetivo: Listar apenas as notas (números) dadas por um usuário. Exemplo:
?- notas_do_usuario(1, Notas). % Notas da Alice
Notas = [5, 4, 5].Fase 2: Lógica e Agregação
Utilize listas e aritmética (sum_list, length, is).
2.1 media_avaliacoes/2
- Objetivo: Calcular a média aritmética das notas de um usuário. Exemplo:
?- media_avaliacoes(1, Media).
Media = 4.66.2.2 usuario_hater/1
- Objetivo: Verdadeiro se o usuário tem mais notas 1 do que notas 5. Exemplo:
?- usuario_hater(1).
false.2.3 filmes_nao_avaliados/2
- Objetivo: Listar IDs de filmes que o usuário nunca avaliou. Exemplo:
?- filmes_nao_avaliados(1, Filmes).
Filmes = [2, 5, 8].Fase 3: Sistema Colaborativo
Esta fase implementa o núcleo do sistema de recomendação.
3.1 vizinhos/2 e comum/3
- Objetivo: Definir que dois usuários são vizinhos se avaliaram o mesmo filme (ID) e ambos deram nota \(\ge 4\).
3.2 recomenda/2
- Assinatura:
recomenda(UsuarioID, FilmeTitulo) - Regras: Predicado deve ser verdadeiro (retornar o Filme) se:
- Existe um Vizinho que avaliou o Filme com nota \(\ge 4\).
- O Usuário alvo não avaliou o Filme.
- Regra de Ódio: O Usuário alvo não deu nota 1 para nenhum filme do mesmo Diretor deste Filme.
- Variação da Matrícula: O Filme satisfaz a regra do seu grupo (Idade/Tempo/Ano).
Exemplo:
?- recomenda(1, Titulo).
Titulo = 'Interestelar'.