🚀 Capítulo 04: Programação Lógica (Prolog) (Tema: Sherlock Holmes)
NOTE
Este capítulo utiliza a temática de Sherlock Holmes para explicar a Programação Lógica. Para resolver um crime, você não diz ao computador o que fazer, mas sim os fatos e as regras para que ele deduza o culpado!
1. 🎯 Objetivo da Aula
Compreender o conceito de Programação Lógica, baseada em Fatos, Regras e Consultas, e como ela se diferencia dos paradigmas imperativo e funcional.
2. 🏢 O Cenário Prático (Seu Desafio)
Sherlock Holmes está investigando o roubo do diamante da coroa. Ele coletou as seguintes informações:
- Fatos:
- O mordomo estava na mansão.
- O diamante sumiu às 22h.
- O mordomo tinha a chave do cofre.
- Regras:
- Uma pessoa é suspeita se ela estava na mansão E tinha a chave do cofre.
Em vez de escrever um algoritmo com if e for para buscar o culpado, Sherlock usa a Programação Lógica. Ele joga os fatos e as regras no sistema e faz uma pergunta (Consulta): "Quem é o suspeito?". O computador faz a dedução sozinho!
Seu desafio é entender como estruturar esse raciocínio lógico.
3. 🧠 Fundamentos: A Teoria Traduzida
A Programação Lógica (cujo maior exemplo é a linguagem Prolog) é um tipo de paradigma declarativo. Você não diz ao programa COMO resolver, mas fornece a base de conhecimento.
🧩 Os Três Componentes:
- Fatos: São as verdades absolutas do problema.
- Exemplo:
mordomo_estava_na_mansao.
- Exemplo:
- Regras: São as condições que permitem deduzir novos fatos a partir dos existentes.
- Exemplo:
suspeito(X) :- estava_na_mansao(X), tinha_chave(X).(Lê-se: X é suspeito SE X estava na mansão E X tinha a chave).
- Exemplo:
- Consultas (Queries): As perguntas que você faz ao sistema.
- Exemplo:
?- suspeito(Quem).
- Exemplo:
4. 📖 Exemplo Guiado: Deduzindo o Culpado
Vamos escrever isso em um pseudocódigo estilo Prolog:
Base de Conhecimento:
estava_na_mansao(mordomo).
estava_na_mansao(watson).
tinha_chave(mordomo).
suspeito(X) :- estava_na_mansao(X), tinha_chave(X).Consulta:
?- suspeito(Quem).
Resposta do Sistema:
Quem = mordomo.
5. 🛠️ Prática Obrigatória 1: Criando Regras
Com base no exemplo acima, imagine que adicionamos um novo fato e uma nova regra:
- Fato:
tem_motivo(mordomo). - Regra:
culpado(X) :- suspeito(X), tem_motivo(X).
- Se fizermos a consulta
?- culpado(Quem)., qual será a resposta do sistema? - E se o fato fosse
tem_motivo(watson)., quem seria o culpado?
6. 🛠️ Prática Obrigatória 2: Onde usar isso?
A programação lógica não é usada para fazer sites ou aplicativos comuns. Pesquise em quais áreas da tecnologia a linguagem Prolog e a programação lógica em geral são mais utilizadas. (Dica: Pense em Inteligência Artificial e sistemas de tomada de decisão).
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 04 Paradigmas) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
mod_10_paradigmas_e_padroes_de_projeto/
├── capitulos/
│ ├── capitulo_04_logica.md
│ └── codigos/
│ └── cap04/
│ └── detetive.pl9. 💡 Checkpoint de Lógica
Na programação lógica, se o sistema não encontrar uma resposta que prove a sua consulta com base nos fatos, ele retorna false (falso). Isso significa que a afirmação é falsa ou apenas que o sistema não sabe a resposta?
10. 🔥 Desafio de Fixação
Pesquise o que significa o mecanismo de Backtracking usado pelo Prolog para encontrar soluções.
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
- O culpado será o mordomo (ele é suspeito e tem motivo).
- O sistema retornaria
falseou vazio, pois o Watson não é considerado suspeito pela regra anterior (ele não tinha a chave), então ele não pode ser culpado mesmo tendo motivo.