/* Some facts about class relationships */
institution(pontificia_universidade_catolica_de_minas_gerais).
course(ciencia_da_computacao).
class(linguagens_de_programacao).
professor(marco_rodrigo).
student(antonio_monteiro,marco_rodrigo).
student(bruna_oliveira,marco_rodrigo).
student(izabela_borges,marco_rodrigo).
presentation(prolog).

/* A general rule */
student(GROUP_MEMBER,PROFESSOR).
?- write('Prolog Presentation').
 
Prolog Presentation
true
?- student(GROUP_MEMBER,marco_rodrigo).

GROUP_MEMBER = antonio_monteiro ;

GROUP_MEMBER = bruna_oliveira ;

GROUP_MEMBER = izabela_borges

true

?- write('Sumário').

  • Introdução
  • Timeline
  • Histórico
  • Influências
  • Dialetos
  • Implementações
  • Paradigmas
  • Características marcantes
  • Usos da linguagem
  • Exemplos de Fonte
  • Linguagens influenciadas pelo Prolog
  • Curiosidades
  • Considerações finais

?- write('Introdução').

      O Prolog nasceu de um projeto que ao contrário do que se possa imaginar, não pretendia criar uma linguagem de programação, mas que focava em uma forma de processamento de linguagem natural, o francês.

04

?- write('Timeline').

  • 1970–1974 Nascimento do Prolog

  • 1979–1982 Prolog II e os primeiros micro-
    computadores

  • 1982–1990 Prolog III e suas restrições

  • 1990–1996 Prolog IV e suas restrições

05

?- write('1970–1974 Nascimento do Prolog').

  • Foi criada a partir do projeto TAUM

  • Fortemente derivada de Q-systems

  • Não foi criada com o intuito de ser uma nova linguagem de programação

  • Teve o nome derivado da expressão  PROgrammation en LOGique

  • Baseada em predicados e cláusulas de Horn

06

?- write('1979–1982 Prolog II e os primeiros micro-computadores').

  • Introdução do conceito de árvores infinitas

  • Restrições de negação e diferenciação (≠)

  • Livre das estruturas cíclicas do Prolog I

  • Verificação de diferenciação entre elementos sem necessidade do operador cut

07

?- write('1982–1990 Prolog III e suas restrições').

  • Manipulação aperfeiçoada de árvores infinitas e tratamento específico de listas

  • Princípio da bivalência da álgebra de Boole

  • Processamento de valores numéricos, incluindo adição, multiplicação por 2 e relações de <, ≤, ≥, >

  • Processamento generalizado de negação e igualdade

08

?- write('1982–1990 Prolog IV e suas restrições').

  • Eliminação de Gauss

  • Algoritmo Simplex

  • Manipulações restritivas de árvores e listas

  • Estreitamento e propagação de intervalos de ponto flutuante

  • Estudo da programação concorrente no paradigma lógico de programação

09

?- write('Influências').

PLANNER,  projetada por Carl Hewitt como parte da sua pesquisa de doutorado no Laboratório de Inteligência Artificial no MIT

 

Q-systems, projetada por Alain Colmerauer para ser utilizada como formalismo de linguagem no projeto TAUM de processamento de linguagens naturais

10

?- write('Dialetos').

ISO-Prolog, padrão desenvolvido devido a problemas na portabilidade dos programas.

 

Edinburgh Prolog, definido de acordo com o compilador WAM Machine. Recebeu esse nome pelo fato de ser distribuído principalmente pela Universidade de Edimburgo.

11

?- write('Implementações').

As primeiras implementações do Prolog foram interpretadores.

  • Prolog IV, versão não comercializada atualmente

  • SWI-Prolog, foco em Web Semântica 

  • GNU Prolog, interpretado por uma WAM Machine

  • XSB Prolog, suporte a tipagem de dados 

  • Strawberry Prolog, interface gráfica e debugger utilizando árvore de provas

12

?- write('Paradigmas').

  • Declarativo: se concentra em qual é o problema, sem detalhar o processo de resolução. Favorece o 'que' ao invés de 'como';

  • Lógico: se concentra em expressões lógicas e matemáticas. É o melhor paradigma para se resolver problemas de forte raiz lógica;

  • Restritivo: contém expressões que restringem uma solução.

13

?- write('Características').

  • É uma linguagem lógica, declarativa e a partir da sua terceira versão contou com o paradigma restritivo

  • Roda a partir de consultas (queries) à base de dados e suas respectivas relações lógicas

  • Não emprega tipos de dados, mas uma estrutura chamada 'termo' que é definida lexicalmente 

  • Seus termos são divididos em fatos e regras

14

?- write('Características').

  • Suas representações de dados são definidas em átomos e variáveis: 

    • Átomo: sequencia de caracteres alfanuméricos sempre em caixa baixa

    • Variáveis: se comporta como uma incógnita e é escrito ou começa com caractere em caixa alta

  • Utiliza recursão baseada na unificação de predicados 

  • Utiliza backtracking, processo semelhante à busca em profundidade 

15



/* Estrutura de regras recursivas */
ancestral(X,Y) :- mãe(X,Y).
ancestral(X,Y) :- pai(X,Y).
ancestral(X,Y) :- mãe(X,Z),ancestral(Z,Y).
ancestral(X,Y) :- pai(X,Z),ancestral(Z,Y).

/* Ordem de unificação dos predicados */
ancestral(X,Y) :- ancestral(Z,Y),mãe(X,Z).
ancestral(X,Y) :- ancestral(Z,Y),pai(X,Z).
16

?- write('Prolog no uso acadêmico').

  • Usada nos principais cursos de linguagem de programação 

  • Pré-requisito para cursos de introdução à programação para Inteligência Artificial

17

?- write('Prolog na Inteligência Artificial').

  • Geralmente tem como pré-requisito base de programação em Prolog

  • Utilizada em aplicações que necessitam de base de dados relacional

  • Utiliza árvores de pesquisa com busca em profundidade

  • É a linguagem de escolha do IBM Watson para base de dados e NPL

18

?- write('Prolog em jogos').

  • Simples para uso em relações lógicas

  • Utiliza geralmente Strawberry Prolog por sua biblioteca de interface gráfica

  • Ineficiente em sua forma pura e inutilizado em programação de jogos comercializáveis

  • Implementação intuitiva em caso de jogos de RPG

19

?- write('Prolog na programação de compiladores').

  • Compilador para a linguagem Edison

  • Prolog x Pascal (processual) x PGS e GAG (declarativa)

  • Pontos fortes:

    • Rapidez na geração de código e análise semântica

  • Pontos fracos:

    • Análise sintática

20

?- write('Prolog na Web Semântica').

  • Web Semântica é uma extensão da WWW atual que permitirá aos humanos e computadores trabalharem em cooperação

  • No estudo feito por Jan Wielemaker foi verificado que que o SWI-Prolog se adapta muito bem à Web Semântica e em um mês os pesquisadores  conseguira implementa um portal completamente funcional

21

?- write('The Fifth Generation Computer System').

  • Projeto do governo japonês para a criação de um supercomputador com capacidade prática em inteligência artificial 

  • Utilizada em programação paralela e hardware

  • Foi a principal linguagem utilizada nesse projeto

22

?- write('Linguagens Prolog-based').

  • Visual Prolog

  • Mercury

  • Oz

  • Erlang

  • Datalog

23

?- write('Curiosidades').

  • A extensão de arquivo padrão do Prolog é o .pl, porém devido ao conflito causado pela linguagem Perl (1987) ter adotado a mesma extensão, Prolog também pode ser salvo como .pro, .P, .prolog, .plg, .spj, dentre outras.

  • O algoritmo Simplex usado na melhoria para o Prolog IV, também é usado principalmente por Python na programação linear.

  • A ideia de programação lógica na forma mais pura, por cláusulas relacionais é citada como ponto de desenvolvimento de um jogo fictício chamado Erebos, em um livro de literatura que leva o mesmo nome.

24

?- write('Considerações finais').

25

É interessante e recomenda-se o estudo aos alunos que têm interess em estruturas de base de dados que se relacionam com sistemas inteligentes.

?- write('Referências').

26
  1. SEBESTA, Robert W. Conceitos de Linguagens de Programação 4ª ed. (Porto Alegre: Bookman). 572-599 p..

  2. COLMERAUER, Alain; ROUSSEL, Philippe. The birth of Prolog. Artigo apresentado na History of Programming Languages Conference, ACM SIGPLAN, Cambridge USA, 20-23 Apr. 1993.

  3. KOWALSKI, Robert A. The early history of Logic Programming, CACM vol. 31, nº. 1, 38-43 p., 1988.

  4. TUCKER, Allen B. Programming Languages 2ª ed. (McGraw-Hill Book Co.) 382-411 p..

  5. COLMERAUER, Alain. From natural language processing to Prolog. Conjunto de slides compilados por Alain Colmerauer para uma palestra na Academy of Mathematics and System Sciences em Pequim, China, em April 8, 2011. Disponível em: <http://alain.colmerauer.free.fr/>, acessado em 18 de ago. de 2016.

?- write('Dúvidas?').

?- write('Contato').

 

Bruna Cunha de Oliveira

bruna.oliveira.947632@sga.pucminas.br

 

Izabela Caldeira Borges

izabela.borges@sga.pucminas.br

Prolog Presentation

By Izabela Borges

Prolog Presentation

This is a presentatin on Prolog, a logic programming language that was studied on the subject of Programming Languages on Computer Science graduate course on PUC Minas.

  • 303