Aplicação Prática com Estrutura

filósofo

Uma das aplicações mais elegantes das estruturas em Prolog é a modelagem de objetos geométricos. Usando functors aninhados, podemos representar pontos, linhas, triângulos e outras figuras, e então verificar propriedades através de unificação e casamento de padrões. Vamos explorar essa aplicação passo a passo.

1. Modelagem Geométrica

Primeiro, definimos as estruturas básicas:

Essas estruturas podem ser aninhadas. Por exemplo, uma linha é definida por dois pontos:

2. Diagrama dos Objetos Geométricos

Visualize os objetos no plano cartesiano:

3. Programa 5.6: Vertical e Horizontal

Vamos definir predicados para identificar linhas verticais e horizontais usando apenas casamento de padrões e unificação:

Observe a elegância dessas definições:

  • Não há loops, comparações ou cálculos.
  • Apenas casamento de padrões com a estrutura linha(ponto(X,_), ponto(X,_)).
  • O Prolog unifica automaticamente as coordenadas X.

4. Consultas com Vertical e Horizontal

Teste 1: Linha Vertical

A unificação verifica que X=1 em ambos os pontos → linha vertical.

Teste 2: Linha Não Vertical

X é diferente (1 ≠ 2) → não é vertical.

Teste 3: Linha Horizontal com Variável

O Prolog descobre que Y deve ser 1 para que a linha seja horizontal.

5. Consultas Mais Complexas

“Existe uma linha vertical com extremo em (2,3)?”

O Prolog responde com uma solução genérica: o segundo ponto deve ter a mesma coordenada X=2, mas Y pode ser qualquer valor (_ é uma variável não instanciada).

“Existe uma linha que seja vertical e horizontal ao mesmo tempo?”

6. Exercícios do PDF: Retângulos e Quadrados

Exercício: Definir regular/1

Um retângulo regular tem lados verticais e horizontais. Podemos definir:

Exercício: Definir quadrado/1

Um quadrado é um retângulo com lados iguais. Podemos estender a definição:

Testando as Definições

7. O Poder da Unificação com Estruturas

A magia por trás dessas definições é a unificação. Observe:

Essa capacidade de gerar respostas parciais (com variáveis) é uma das características mais poderosas do Prolog. Ela permite que o sistema derive propriedades sem que precisemos especificar todos os detalhes.

8. Diagrama: Retângulo e Quadrado

Visualize as definições:

9. Exercícios Adicionais

  1. Paralelogramo: Defina paralelogramo/1 para uma lista de 4 pontos onde lados opostos são paralelos.
  2. Losango: Defina losango/1 como um paralelogramo com todos os lados iguais.
  3. Ponto médio: Defina ponto_medio(P1, P2, M) onde M é o ponto médio entre P1 e P2.
  4. Comprimento: Defina comprimento(linha(P1,P2), C) que calcula o comprimento da linha.
  5. Circunferência: Defina uma estrutura circulo(Centro, Raio) e predicados para verificar se um ponto pertence à circunferência.

10. Conclusão

Este exemplo mostra como estruturas + padrões criam uma base poderosa para programação declarativa:

  • Estruturas modelam dados complexos (pontos, linhas, figuras).
  • Padrões (casamento de estruturas) permitem verificar propriedades.
  • Unificação gera respostas genéricas e parciais.
  • Recursão permite explorar figuras mais complexas.

Essa abordagem elimina a necessidade de loops, índices ou estruturas de controle complexas. O código é legível, conciso e expressivo — exatamente como a programação lógica deve ser.

Estruturas (Functors)

filósofo

Em Prolog, estruturas (também chamadas de functors) são a forma de criar objetos de dados complexos que agrupam múltiplos componentes sob um mesmo nome. Elas são equivalentes a registros em outras linguagens, permitindo modelar dados estruturados de forma natural e declarativa.

1. O que é uma Estrutura?

Uma estrutura em Prolog é um objeto composto que agrupa vários componentes (argumentos) sob um functor (um nome que identifica o tipo da estrutura). A sintaxe é:

Os componentes podem ser de qualquer tipo: átomos, números, variáveis ou até mesmo outras estruturas.

Exemplos de Estruturas

2. Estruturas como Dados vs. Fatos como Relacionamentos

É importante entender a diferença entre estruturas e fatos:

  • Estrutura: Um objeto de dados. Ex: ponto(3,5) é um dado que representa um ponto no plano.
  • Fato: Um relacionamento entre objetos. Ex: distancia(ponto(0,0), ponto(3,4), 5). é um fato que relaciona dois pontos e sua distância.

Estruturas podem aparecer como argumentos dentro de fatos e regras.

3. Programa 5.6: Acontecimentos Históricos

Vamos criar uma base de dados de acontecimentos históricos usando estruturas para representar datas:

Consultando Acontecimentos Históricos

1. Qual é o acontecimento de uma data específica?

2. Em que data ocorreu a Proclamação da República?

3. Quais acontecimentos ocorreram no mês de setembro?

4. Quais acontecimentos ocorreram no século XIX (anos 1800-1899)?

5. Extrair partes da data:

4. O Conceito de Functor

O functor é a “tag” ou “rótulo” que identifica o tipo da estrutura. Ele consiste no nome do functor e na sua aridade (número de argumentos).

Dois functors com o mesmo nome mas aridades diferentes são considerados diferentes. Por exemplo, data/3 (dia, mês, ano) e data/2 (mês, ano) são functors distintos.

5. Estruturas Aninhadas

Uma das grandes vantagens das estruturas é que elas podem ser aninhadas, permitindo modelar dados complexos de forma hierárquica.

Consultas com Estruturas Aninhadas

6. Exercícios Propostos

Pratique a criação e uso de estruturas com estes desafios:

  1. Livro: Crie uma estrutura livro/4 com título, autor, ano e ISBN. Adicione alguns fatos livro(...) e faça consultas para:
    • Encontrar todos os livros de um autor específico.
    • Encontrar livros publicados antes de 1950.
    • Extrair o ISBN de um livro pelo título.
  2. Funcionário: Crie uma estrutura funcionario/4 com nome, cargo, salário e departamento. Adicione fatos e consulte:
    • Funcionários com salário acima de 5000.
    • Funcionários de um determinado departamento.
    • Encontrar o salário de um funcionário pelo nome.
  3. Endereço aninhado: Crie uma estrutura pessoa/3 com nome, idade e endereco/4 (rua, número, cidade, estado). Adicione fatos e consulte:
    • Pessoas que moram em um determinado estado.
    • Pessoas que moram em uma determinada cidade.
    • Pessoas com idade acima de 18 anos.
  4. Pedido: Crie estruturas para representar um sistema de pedidos:
    • produto(Nome, Preco)
    • item(Produto, Quantidade)
    • pedido(Numero, Cliente, ListaDeItens, Total)
    Desafio: Calcule o total do pedido somando preco * quantidade.

7. Conclusão

As estruturas (functors) são uma ferramenta essencial em Prolog para:

  • Modelar dados complexos: Agrupe informações relacionadas em um único objeto.
  • Criar hierarquias: Aninhe estruturas para representar dados com múltiplos níveis.
  • Facilitar consultas: Use padrões de unificação para extrair componentes específicos.
  • Organizar o código: Dê nomes significativos aos seus dados usando functors.

Diferente de listas (que são sequências), estruturas têm componentes fixos e nomeados (pelo functor), o que as torna ideais para representar entidades do mundo real com atributos conhecidos.

Pratique com os exercícios e explore como estruturas podem tornar seus programas Prolog mais legíveis, organizados e expressivos!