Exemplos de Programas em Prolog
Neste capítulo, fornecemos vários programas exemplos de Prolog. Os programas são fornecidos em uma progressão de programas bastante simples para programas mais complexos. Os principais objetivos da apresentação são mostrar vários métodos importantes de representação do conhecimento em Prolog e a metodologia de programação declarativa de Prolog.
2.1 Coloração de mapas
Esta seção usa um famoso problema matemático - de colorir mapas planares - para motivar representações lógicas de fatos e regras no Prolog. O programa Prolog desenvolvido fornece uma representação para regiões adjacentes em um mapa e mostra uma maneira de representar as cores e uma definição de quando as cores estão em conflito; ou seja, quando duas regiões adjacentes têm a mesma coloração. A seção apresenta o conceito de árvore de cláusulas do programa semântico - para motivar a questão da semântica para a programação baseada em lógica.
2.2 Duas Definições de Fatorial
Esta seção apresenta ao aluno os cálculos de funções matemáticas usando Prolog. Vários operadores aritméticos integrados são discutidos. Também é discutido o conceito de uma árvore de derivação Prolog e como as árvores de derivação estão relacionadas aos traçados de Prolog.
2.3 Quebra-cabeças das Torres de Hanói
Este famoso quebra-cabeça foi formulado em Prolog. A discussão diz respeito aos significados declarativos e procedimentais do programa. O programa escreve soluções de quebra-cabeça na tela.
2.4 Carregando programas, editando programas
Exemplos mostram várias maneiras de carregar programas no Prolog, e um exemplo de um programa que chama um editor. O leitor é encorajado a ler as seções 3.1 e 3.2 em Como funciona o Prolog antes de continuar para a seção 2.5
2.5 Negação como falha
A seção fornece uma introdução ao recurso de negação como falha do Prolog, com alguns exemplos simples. Outros exemplos mostram algumas das dificuldades que podem ser encontradas para programas com negação como falha.
2.6 Dados e relações em árvores
Esta seção mostra as definições do operador Prolog para uma estrutura de árvore simples. As relações de processamento da árvore são definidas e os objetivos correspondentes são estudados.
2.7 Listas Prolog
Esta seção contém algumas das relações de acesso e processamento de lista do Prolog mais úteis. A estrutura dinâmica primária do Prolog é a lista, e esta estrutura será usada repetidamente nas seções posteriores.
2.8 Troco para um dólar
Estamos um programa simples para calcular trocos em pagamentos. A observação importante aqui é como um predicado do Prolog como 'member' pode ser usado para gerar escolhas, as escolhas são verificadas para ver se resolvem o problema e, em seguida, retroceder em 'member' gera escolhas adicionais. Esta estratégia fundamental de geração e teste é muito natural no Prolog.
2.9 Redux da coloração de mapas
Vamos dar uma outra olhada no problema de coloração do mapa introduzido na Seção 2.1. Desta vez, os dados que representam a adjacência da região são armazenados em uma lista, as cores são fornecidas em uma lista e o programa gera colorações que são então verificadas quanto à exatidão.
2.10 I/O Simples
Esta seção discute a abertura e fechamento de arquivos, leitura e gravação de dados Prolog.
2.11 Quebra-cabeça do desafio das rainhas do xadrez
Este quebra-cabeça popular é formulado no Prolog usando um programa de geração de permutação da Seção 2.7. O backtracking nas permutações produz todas as soluções.
2.12 Conjunto de respostas
Apresentamos os predicados 'setof' e 'bagof' do Prolog. Fornece uma implementação de 'bagof' usando 'assert' e 'retract'.
2.13 Gerador de Tabela Verdade
Esta seção projeta um avaliador recursivo para expressões infix booleanas e um programa que imprime uma tabela verdade para uma expressão booleana. As variáveis são extraídas da expressão e as atribuições de verdade são geradas automaticamente.
2.14 Analisador AFD Um analisador AFD (autômato finito determinístico) genérico é apresentado. AFDs particulares são representados como dados Prolog.
2.15 Estruturas e caminhos em grafos
Esta seção apresenta um gerador de caminho para grafos representados usando uma representação Prolog estática. Esta seção serve como uma introdução e motivação para a próxima seção, onde a busca dinâmica aumenta o grafo de busca conforme ele executa.
2.16 Busca
A seção anterior discutiu a geração de caminhos em um grafo estático. Esta seção desenvolve uma estrutura geral do Prolog para busca em grafos, onde o grafo de busca é construído à medida que a busca prossegue. Essa é a base para algumas das técnicas de busca em grafos mais sofisticadas em I.A.
2.17 Jogo dos Animais
Este é um programa para identificação de animais aparece em várias referências de uma forma ou de outra. Aproveitamos a oportunidade para fornecer uma formulação única usando cláusulas Prolog como banco de dados de regras. A implementação da verificação de objetivos questionáveis (perguntas) é especialmente limpa. Este exemplo é uma boa motivação para sistemas especialistas, que são estudados no Capítulo 6.
2.18 Cláusulas como dados
Esta seção desenvolve uma ferramenta de análise de programa Prolog. O programa analisa um programa Prolog para determinar quais procedimentos (predicados) usam, ou chamam, quais outros procedimentos no programa. O programa a ser analisado é carregado dinamicamente e suas cláusulas são processadas como dados de primeira classe.
2.19 Ações e planos
É apresentado um protótipo interessante para especificações de ação e planejamento, usando o mundo dos blocos. Este importante assunto é continuado e expandido no Capítulo 7.