Prolog Tutorial
Introdução
Prolog é uma linguagem de programação lógica e declarativa. Seu nome (Prolog) é a abreviação de PROgramming in LOGic. Prolog é baseado na pesquisa sobre provadores de teoremas e outros sistemas de dedução automatizados desenvolvidos nas décadas de 1960 e 1970. Seu mecanismo de inferência é baseado no princípio de resolução de Robinson (1965) juntamente com os mecanismos de extração de respostas propostos por Green (1968). Essas ideias se juntaram com força com o advento dos procedimentos de resolução linear. Procedimentos explícitos de resolução linear direcionada a um objetivo, como os de Kowalski e Kuehner (1971) e Kowalski (1974), deram ímpeto ao desenvolvimento de um sistema de programação lógica de propósito geral. O "primeiro" Prolog foi "Marseille Prolog" baseado no trabalho de Colmerauer (1970). A primeira descrição detalhada da linguagem Prolog foi o manual para o interpretador Marseille Prolog (Roussel, 1975). A outra grande influência na natureza deste primeiro Prolog foi que ele foi projetado para facilitar o processamento de linguagem natural.
Prolog é o principal exemplo de uma linguagem de programação de quarta geração que suporta o paradigma de programação declarativa. O Projeto de Computador Japonês de Quinta Geração, anunciado em 1981, adotou Prolog como uma linguagem de desenvolvimento e, portanto, concentrou considerável atenção na linguagem e em suas capacidades. Os programas neste tutorial são escritos em Prolog "padrão" (University of) Edinburgh, conforme especificado no livro Prolog clássico dos autores Clocksin e Mellish (1981, 1992). O outro tipo principal de Prolog é a família Prolog II de Prologs que são descendentes de "Marseille Prolog". A referência a Giannesini, et.al. (1986) usa uma versão do Prolog II. Existem diferenças entre essas duas variedades de Prolog: parte da diferença é a sintaxe e parte é a semântica. No entanto, os alunos que aprendem qualquer tipo de Prolog podem facilmente se adaptar ao outro tipo.
Este tutorial deve ser usado para ajudar a aprender os conceitos básicos e essenciais do Prolog. Os programas de amostra foram especialmente escolhidos para ajudar a promover o uso da programação Prolog em um curso de inteligência artificial. Lisp e Prolog são as linguagens de programação simbólica mais usadas para inteligência artificial. Elas são amplamente consideradas como linguagens excelentes para "programação exploratória" e "programação baseada em protótipo".
Capítulos
- O Capítulo 1 explica o ambiente de programação Prolog para o iniciante.
- O Capítulo 2 explica a sintaxe do Prolog e muitos fundamentos da programação do Prolog através do uso de exemplos cuidadosamente escolhidos. Os programas exemplo são organizados para orientar o aluno através do desenvolvimento de programas Prolog que são construídos de forma declarativa de cima para baixo. Todo o cuidado foi tomado para cobrir as técnicas de programação Prolog que são muito úteis em um curso de inteligência artificial. Na verdade, este manual pode servir como uma introdução conveniente, pequena e concisa do Prolog para tal curso. Questões semânticas foram abordadas pela introdução antecipada do conceito de uma árvore de cláusulas do programa que é usada para definir de uma maneira abstrata quais são as consequências de uma especificação de programa Prolog. O autor acredita que esta seja uma maneira viável de promover as questões semânticas básicas de verificação de software para programação Prolog. A última seção deste capítulo apresenta um exemplo que mostra que Prolog pode ser usado efetivamente para fornecer especificações precisas e cuidadosas de sistemas, ao contrário de sua reputação usual de ser difícil de documentar porque é fácil de usar como uma ferramenta de programação exploratória.
- O Capítulo 3 explica a operação do mecanismo de inferência subjacente do Prolog e deve ser lido pela primeira vez depois que o aluno tiver estudado dois ou três dos programas exemplo do Capítulo 2. A última seção deste capítulo apresenta os meta-interpretadores do Prolog.
- O Capítulo 4 fornece uma visão resumida dos principais predicados embutidos do Prolog, muitos dos quais são exemplificados no Capítulo 2.
- O Capítulo 5 fornece um esboço para o desenvolvimento de programas de busca A*. A seção 5.3 tem um programa com busca αβ para o jogo da velha.
- O Capítulo 6 apresenta uma apresentação única e extensa de um meta-interpretador lógico para bases de regra lógicas normais.
- O Capítulo 7 fornece uma introdução ao gerador de analise gramatical embutido do Prolog e uma breve visão geral de como o Prolog pode ser usado para analisar sentenças em inglês (linguagem natural). Além disso, há uma seção que cobre a construção de interfaces de linguagem natural idiomática simples para programas.
- O Capítulo 8 mostra como implementar diversos protótipos Prolog. A seção (§8.4) desenvolve uma conexão interativa entre Prolog (máquina de inferência) e Java (GUI) para jogar jogo da velha. O modelo de conexão simples é amplamente adaptável e aplicável.
Nota desta Versão
Este material é uma tradução com pequenos ajustes e atualizações do material original publicado pelo professor Dr. John R. Fisher, Ph.D, professor emérito na California State Polytechnic University, Pomona, com sua autorização concedida em 14 de outubro de 2020.
Notas Finais do Autor
Versões anteriores de partes deste tutorial datam de 1988. O material introdutório foi originalmente usado para ajudar a explicar um interpretador Prolog desenvolvido pelo autor (não mais disponível) para uso em seus cursos. O autor acredita que o material introdutório, reunido na forma dada aqui, pode ser muito útil para o aluno que deseja uma introdução rápida, mas bem adaptada, ao Prolog.
Para tratamentos mais completos do Prolog, o aluno é aconselhado a consultar os livros de Clocksin e Mellish (1981,1992), de O'Keefe (1990), de Clocksin (1997, 2003) ou de Sterling e Shapiro (1986).
Para excelentes notas históricas sobre Prolog e processamento de linguagem natural usando Prolog, o texto de Pereira e Shieber (1987) é recomendado.