You are on page 1of 8

PROLOG

CEZAR AUGUSTO FIGUEIREDO DA ROCHA


EDINAURA GUERREIRO GATO
MATHEUS CARVALHO DE LIMA
SUELI DA SILVA CORRÊA

UFOPA – UNIVERSIDADE FEDERAL DO OESTE DO PARÁ


Sistema de Informação (SI2018) – Trabalho de Graduação
27 de agosto de 2018

RESUMO

Este trabalho visa expor sobre o conceito básico da linguagem de programação


PROLOG de forma clara e simples, para que o leitor possa entender da melhor forma possível
sua estrutura e funcionamento, utilizando de conceitos de lógica formal dados em sala de aula
na disciplina de Matemática Discreta.

Palavras chaves: PROLOG; linguagem; lógica; matemática.

1- INTRODUÇÃO

O PROLOG (Programming in Logic), criada por Colmerauer e Roussel em 1972


na Universidade de Marseille, França, é uma linguagem declarativa baseada na lógica de
predicados e embasada pelas Clausulas de Horn (BRATKO, 1990). Ao contrário das linguagens
procedurais, a escrita nessa linguagem utiliza apenas de proposições, isso evita que o
programador descreva os passos a passos necessários para a resolução de um problema, onde
apenas do uso de sua estrutura lógica de termos, formulas e clausulas é o suficiente para sanar
tal problemática (GERSTING, 2013). Em suma, a linguagem PROLOG é definida por uma
relação entre objetos através de fatos e regras (BRATKO, 1990). Nesse trabalho apresentaremos
os conceitos básicos e características da linguagem para melhor entendimento do leitor.
2- CARACTERISTICAS
 Orientada a processamento simbólico
 Coloca a Lógica como uma linguagem de programação
 Linguagem declarativa
 Permite a obtenção de respostas alternativas
 Dispensa mecanismos de controles tradicionais como else, while, etc, apesar
de, através de combinações de predicados, ser possível criar tais controles.

3- CONCEITOS BÁSICOS

Por ser declarativa, ela possui um conjunto de declarações conhecido como banco
de dados PROLOG, na qual os itens que compõem esse banco de dado possuem duas formas,
os fatos e as regras (GERSTING, 2012).

Os dados são conhecidos como átomos, podendo ser uma constante, variável ou
termo composto. Além disto, a linguagem dispõe também de operadores matemáticos,
operadores relacionais, questões, propriedades de entrada e saída, constantes e variáveis
(BRATKO, 1990). Abaixo conceituamos cada uma delas.

3.1- FATOS

A linguagem PROLOG funciona através de relações entre Átomos de um


predicado, e a isso, denominamos de Fatos. Os Fatos são estruturados por um predicado, os
objetos e o ponto final, sempre seguindo essa regra de inferência, e sempre são iniciadas com
letras minúsculas (BRATKO, 1990). Como exemplo, usaremos uma pequena cadeia alimentar:

Figura 1- Banco de dados PROLOG

Fonte: Elaborada pelo autor.

Assim como em qualquer linguagem de programação, a ordem sempre importa. É


de responsabilidade do programador manter uma compreensão e consistência entre os objetos
do predicado, pois, analisando os fatos citados acimas, eles devem ser lidos como: x (gato) bebe
y (leite). Se não houver essa compreensão, pode-se entender que tanto o gato bebe o leite,
quanto o leite bebe o gato.
Para isso, podemos descrever os predicados acima como dois predicados unários,
ou seja, possuem um único objeto (Átomo), animal e planta, organizando da seguinte forma.
(GERSTING, 2012):

Figura 2 - Banco de dados PROLOG

Fonte: Elaborada pelo autor.

Através desse pequeno “banco de dados PROLOG”, o programador poderá fazer


suas perguntas e operações, e o programa deverá ser capaz de respondê-las, sempre como
proposições, verdadeiras ou falsas. (GERSTING, 2012)

3.2- QUESTÕES

Com o banco de dado PROLOG já definido, podemos fazer perguntas para que o
programa retorne informações proposicionais referente aos predicados estabelecidos. Na
linguagem, as questões podem ser formuladas utilizando o símbolo “?-” (Sinal de interrogação
e hífen). Através desta combinação, o programa reconhece que está sendo feita uma pergunta.
Nos predicados estabelecidos, está descrito claramente que o gato bebe leite, então, caso seja
feita uma questão sobre, o sistema devolverá um “true” (BRATKO, 1990). Colocando na
linguagem PROLOG, ficará assim

Exemplo 1:
Figura 3- Questão com resposta verdadeira

Fonte: Elaborada pelo autor

Outra pergunta pode ser feita, como:


Exemplo 2:
Figura 4- Questão com resposta falsa

Fonte: Elaborada pelo autor

Como o primeiro exemplo consta no banco de dado, o programa retorna “true”,


porém, o segundo exemplo não está estabelecido, então é retornado “false”. Somado a isto, uma
pergunta com variável também pode ser feita ao programa. Conceituaremos no próximo tópico.
3.3- VARIÁVEIS
Uma variável em PROLOG é caracterizada por permitir a criação de fatos em
consideração a um conjunto de átomos sem serem nomeadas. As variáveis são utilizadas como
formas de se fazer uma pergunta mais complexa ao programa. No exemplo anterior do gato,
perguntamos ao programa se o gato bebe leite, e é retornado um “true”. Porém, pode ser
perguntado também o que o gato bebe. Dessa forma utilizamos uma variável para tal, onde as
variáveis sempre devem ser escritas com letras maiúsculas (BRATKO, 1990). Logo,
exemplificamos da seguinte maneira.

Figura 5- Pergunta com variável

Fonte: Elaborada pelo autor

O programa respondeu à pergunta buscando a primeira informação no banco de


dado, sendo que, sempre vai ser buscada por ordem em que foi ordenada, da primeira linha até
a última linha, nunca de forma aleatória. Se houver mais um átomo correspondente ao “gato”,
o programa esperará uma manifestação do usuário para mostrar outro átomo correspondente.
Caso queira, o usuário deve digitar “ ; ” (Ponto e vírgula), assim, o programa mostrará o
próximo correspondente sempre em ordem, caso ache a resposta dada o suficiente, deverá ser
usada o “ . “ (ponto) (BRATKO, 1990). Veja a seguir:

Figura 6- Pergunta com variável e duas resposta

Fonte: Elaborada pelo autor

Além disso, outros tipos de perguntas podem ser feitos como “quem bebe o que”:

Figura 7- Pergunta com duas variáveis e duas respostas

Fonte: Elaborada pelo autor

3.4- CONJUNÇÃO, DISJUNÇÃO E NEGAÇÃO

Além de questões, podemos fazer a utilização de conceitos lógicos equivalentes a


AND, OR e NOT. A conjunção é representada pela “ , “ (virgula) e a disjunção por “ ; “ (Ponto
e virgula), na qual são colocadas entre os fatos, separando-as (BRATKO, 1990).. Dados os
seguintes fatos:

Figura 8- Fatos PROLOG

Fonte: Elaborada pelo autor

Podemos perguntar ao programa:

Figura 9 - Conjunção

Fonte: Elaborada pelo autor

O programa procurará no banco de dados, informações que responda a essa


conjunção, e retornará “X=gato”, no caso uma proposição verdadeira. Lembrando que, no
conceito lógico AND, as duas condições devem ser verdadeiras, caso contrário, o programa
retornaria “false”. (BRATKO, 1990).

Agora, reaproveitando os mesmos fatos, usaremos a lógica OR no programa.

Figura 10- Disjunção

Fonte: Elaborada pelo autor

Neste outro exemplo, o programa retornará apenas o primeiro fato (gato), já que
este consta no banco de dado, no segundo, ele retornará “false”, pois é um fato falso. No
conceito lógico OR, basta um ser verdadeira para que todo o algoritmo seja verdadeiro, contanto
que, os dois fatos possuam o mesmo predicado, mesmo número de átomos e o primeiro átomo
seja existente no banco de dados, caso o contrário, daria erro (BRATKO, 1990).

Outro conceito lógico é o de negação, representado pelo predicado not. Ao ser


utilizado por exemplo em not(X), o fato só será verdadeiro se X for falso (BRATKO, 1990).

3.5- REGRAS

As regras PROLOG são uma descrição dos predicados utilizando condicionais, elas
definem novas relações com outras já existentes, para isso, é utilizado a combinação de sinais
“ :- “ (Dois pontos e hífen), que representa a condição if (se) (BRATKO, 1990).
Exemplificamos a seguir a regra, adicionando um predicado para presa
(GERSTING, 2012):

Figura 11- Regra PROLOG

Fonte: Elaborada pelo autor

Essa condição diz que, X é uma presa se X é um animal a ser comido. Perguntando
ao programa, onde deverá ser respondido: X=rato.

Figura 12- Questão utilizando a regra PROLOG

Fonte: Elaborada pelo autor

3.6- CLAUSULAS DE HORN

Escrito pelo Matemático Alfred Horn, consiste numa regra na qual é constituída por
uma “cabeça” contendo um predicado e um “corpo” contendo de X¹ a Xn predicados
(REZENDE, 2003). Ela se caracteriza por uma FBF composta de predicados ou de negação de
predicados (tendo variáveis ou constantes como átomo) unidas por conectivos lógicos (AND e
OR), na forma que haja no máximo um predicado não negado. Somando, duas clausulas de
Horn estabelecidas no banco de dados são resolvidas através de uma nova clausula de Horn, se
qualquer um tiver um predicado não-negado correspondendo a um predicado negado da outra,
assim, a nova clausula anula o termo correspondente (GERSTING, 2012). A estrutura da
clausula é: u :- a, b, ... nn, onde o símbolo “:-“ (Dois pontos e hífen) que representa o se, é
equivalente a -> (implica). O predicado à esquerda do if, é a cabeça, e à direita é o corpo da
clausula. (REZENDE, 2003).

3.7- OPERADORES

3.7.1- Operadores Aritméticos

O PROLOG, assim como a maioria das linguagens de programação, também possui


operadores para efetuar operações aritméticas, além de um predicado especial denominado is
(é), que equivale ao sinal de igualdade da matemática convencional. Os operadores são: adição
(+), subtração (-), multiplicação (*), resto da divisão (mod), divisão real (/), Divisão inteira (//)
e potenciação (^) (BRATKO, 1990). Exemplificamos uma operação em PROLOG da seguinte
forma:
Figura 13- Operadores Aritméticos

Fonte: Elaborada pelo autor

3.7.2- Operadores Relacionais

Além dos aritméticos, a linguagem possui também os relacionais ou de comparação,


para isso o PROLOG nos disponibiliza os seguintes operadores relacionais: igual (=), diferente
(\=), maior (>), maior ou igual (>=), menor (<) e menor ou igual (=<). Note que no último, a
colocação de menor ou igual difere da maioria das linguagens, onde é determinado como <=
(BRATKO, 1990). Exemplos:

Figura 14- Operadores Relacionais

Fonte: Elaborada pelo autor

3.8- ENTRADA E SAÍDA

Ao recorrer deste trabalho, foi mostrado operadores relacionais, aritméticos, fatos,


regras, mas como podemos fazer e leitura de uma entrada de dado pelo usuário? E para saída?

Assim como em outras linguagens de programação, o PROLOG também possui


propriedades de entrada e saída. Para fazer a leitura de termos, é utilizado o predicado pré-
definido read (ler), onde o dado lido, será instanciado em uma variável. Para a saída de dados,
há o predicado pré-definido write (escrever), na qual irá “printar” a escrita de um termo,
funcionando de forma equivalente ao “print” de outras linguagens de programação como Java,
Python, etc. Além disto, é proporcionado predicados extras para a formatação da saída. Uma, o
predicado tab(N), onde N é o número de espaços a ser determinado pelo usuário. Outro, o
predicado nl/, que irá fazer uma quebra de linha para uma nova. (BRATKO, 1990).

Figura 15- Pequeno programa utilizando entrada e saída


Fonte: Elaborada pelo autor

4- CONSIDERAÇÕES FINAIS

Neste artigo vimos que, apesar da grande diferença para as linguagens procedurais
como JAVA, Python, etc., a linguagem PROLOG é tão poderosa quanto. Por sua estrutura
diferenciada, a linguagem se torna interessante de se aprender, pois através da lógica,
conseguimos resolver desde problemas simples, como uma operação básica de somatória, até
algo mais complexo como a Inteligência Artificial, onde é amplamente usada. É claro
evidenciar que, o objetivo deste artigo é apenas conceituar o básico desta linguagem, além do
que foi apresentado, há mais a ser aprendido sobre ela. Pode-se dizer que, se Aristóteles
existisse no mundo atual, essa poderia ser sua linguagem de programação preferida, pois todo
o seu conceito acerca da lógica, da premissa, se encaixa perfeitamente no PROLOG.

5- REFERENCIAS BIBLIOGRÁFICAS

BRATKO, I. Prolog Programming for Artificial Intelligence, 2nd Edition, Addison-Wesley,


1990.
GERDTING, Judith L. Fundamentos Matemáticos para a Ciência da Computação: um
tratamento moderno de matemática discreta. / Judith L. Gersting; tradução Valéria de
Magalhães Iório – [Reimpr.]. Rio de Janeiro; LTC, 2012
REZENDE, Solange Oliveira. Sistemas Inteligentes: Fundamentos e Aplicações. Barueri,
SP: Editora Manole Ltda, 2003. ISBN 8520416837.