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:
    1. Existe um Vizinho que avaliou o Filme com nota \(\ge 4\).
    2. O Usuário alvo não avaliou o Filme.
    3. Regra de Ódio: O Usuário alvo não deu nota 1 para nenhum filme do mesmo Diretor deste Filme.
    4. Variação da Matrícula: O Filme satisfaz a regra do seu grupo (Idade/Tempo/Ano).

Exemplo:

?- recomenda(1, Titulo).
Titulo = 'Interestelar'.

Checklist de Entrega

Back to top