Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Prolog, Notas de estudo de Informática

Apostila para Programacao Logica

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 06/05/2009

victor-luiz-piza-soares-1
victor-luiz-piza-soares-1 🇧🇷

5 documentos

1 / 16

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Universidade Estadual do Oeste do Paraná
CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS
Colegiado de Informática
Curso de Bacharelado em Informática
APOSTILA PROLOG
ANDRÉ ABE VICENTE
http://www.inf.unioeste.br/~abvicente
Disciplina: Inteligência Artificial (IA)
Professora: Suzan Kelly Borges Piovesan
Cascavel
Setembro de 2005
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff

Pré-visualização parcial do texto

Baixe Prolog e outras Notas de estudo em PDF para Informática, somente na Docsity!

Universidade Estadual do Oeste do Paraná CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS Colegiado de Informática

Curso de Bacharelado em Informática

APOSTILA PROLOG

ANDRÉ ABE VICENTE

http://www.inf.unioeste.br/~abvicente

Disciplina: Inteligência Artificial (IA) Professora: Suzan Kelly Borges Piovesan

Cascavel Setembro de 2005

ÍNDICE

Este trabalho está licenciado sob uma Licença Creative Commons Atribuição. Para ver uma cópia desta licença, visite http://creativecommons.org/licenses/by/2.0/br/ ou envie uma carta para Creative

  • Prolog - Introdução
  • Programação Prolog
  • SINTAXE E SEMÂNTICA...................................................................................................
    • OBJETOS
      • ÁTOMOS E NÚMEROS
      • VARIÁVEIS
      • ESTRUTURAS
    • RECURSÃO...........................................................................................................
    • UNIFICAÇÃO.........................................................................................................
    • OPERADORES E ARITMÉTICA .................................................................................
      • Tipos de operadores do prolog............................................................................
    • ARITMÉTICA ........................................................................................................
    • LISTAS [Ver slides] ..............................................................................................
  • Apêndice A [Slides Representação de Conhecimento] .........................................................
  • Apêndice B [Slides Listas] ..............................................................................................

André Abe Vicente

Programação Prolog

ƒ A programação em Prolog consiste em estabelecer relações entre objetos e em formular consultas sobre tais relações de forma não numérica, mas simbólica.

ƒ Um programa Prolog é formado por cláusulas. Há três tipos de cláusulas: fatos ou assertivas , regras ou procedimentos e consultas;

ƒ Uma relação pode ser especificada por meio de:

  • fatos, que estabelecem as tuplas de objetos que satisfazem a relação,
  • regras, que estabelecem condições para a satisfação das relações,
  • combinações de fatos e regras descrevendo a relação;

ƒ Interrogar um programa acerca de suas relações por meio de uma consulta corresponde a consultar uma base de conhecimento. A resposta do sistema Prolog consiste em um conjunto de objetos que satisfazem as condições originalmente estabelecidas pela consulta;

Fatos

ƒ Um fato denota uma verdade incondicional,

ƒ Todo fato é composto por um predicado que estabelece uma relação entre seus argumentos e encerrado por um ponto (.) ;

ƒ Exemplo: progenitor(maria, josé). progenitor(joão, josé). progenitor(joão, ana). progenitor(josé, júlia). progenitor(josé, íris).

Regras

  • Definem as condições que devem ser satisfeitas para que uma certa declaração seja considerada verdadeira.

ƒ Cláusulas Prolog desse tipo são denominadas regras****.

ƒ Há uma diferença importante entre regras e fatos:

o Um fato é sempre verdadeiro ;

o Regras especificam algo que "pode ser verdadeiro se algumas condições forem satisfeitas".

ƒ As regras tem:

o Uma parte de conclusão (o lado esquerdo da cláusula - cabeça), e uma parte de condição (o lado direito da cláusula - corpo). O símbolo ":-" significa "se" e separa a cláusula em cabeça e corpo da cláusula.

ƒ Se a condição expressa pelo corpo da cláusula - progenitor (X, Y) - é verdadeira então, segue como conseqüência lógica que a cabeça - filho(Y, X) - também o é.

André Abe Vicente

ƒ Por outro lado, se não for possível demonstrar que o corpo da cláusula é verdadeiro, o mesmo irá se aplicar à cabeça.

ƒ Exemplo: pode-se declarar a relação de filho através de simples fatos como filho(josé, joão).

Entretanto podemos definir a relação "filho" de uma maneira muito mais elegante, fazendo o uso do fato de que ela é o inverso da relação progenitor e esta já está definida. Tal alternativa pode ser baseada na seguinte declaração lógica: Para todo X e Y Y é filho de X se X é progenitor de Y. A declaração acima, escrita em Prolog fica: filho(Y, X) :- progenitor(X, Y). "Para todo X e Y, se X é progenitor de Y, então Y é filho de X".

SINTAXE E SEMÂNTICA

OBJETOS

ƒ O sistema reconhece o tipo de um objeto no programa por meio de sua forma sintática.

ƒ Variáveis sempre irão iniciar com letras maiúsculas, enquanto que as constantes não- numéricas, ou átomos, iniciam com letras minúsculas.

ƒ Nenhuma informação adicional, tal como tipos de dados precisa ser fornecida para que o sistema reconheça a informação com a qual está lidando.

ÁTOMOS E NÚMEROS

ƒ Os argumentos das relações podem ser constantes (como júlia e íris), denominados atomos, ou objetos genéricos denominados variáveis (como X e Y).

ƒ O alfabeto básico adotado aqui para a linguagem Prolog consiste dos seguintes símbolos:

  • Pontuação: ( ). ' "
  • Conetivos: , (conjunção e) ; (disjunção ou) :- (implicação se)
  • Letras: a, b, c, ..., z, A, B, C, ..., Z
  • Dígitos: 0, 1, 2, ..., 9
  • Especiais: + - * / < > = : _ ... etc.

Os átomos podem ser construídos de três maneiras distintas:

a. Como cadeias de letras e/ou dígitos, podendo conter o caracter especial

André Abe Vicente

outubro de 1993, pode ser escrita como: data(13, outubro, 1993)

ƒ Todos os componentes no exemplo são constantes (dois inteiros e um átomo), entretanto, podem também ser variáveis ou outras estruturas. Um dia qualquer de março de 1996, por exemplo, pode ser representado por: data(Dia, março, 1996)

ƒ Sintaticamente todos os objetos em Prolog são denominados termos. O conjunto de termos Prolog , , é o menor conjunto que satisfaz às seguintes condições:

  • Toda constante é um termo;
  • Toda variável é um termo;
  • Se t1, t2, ..., tn são termos e f é um átomo, então f(t1, t2, ..., tn) também é um termo, onde o átomo f desempenha o papel de um símbolo funcional n-ário. Diz-se ainda que a expressão f(t1, t2, ..., tn) é um termo funcional Prolog.

Consultas ƒ Uma consulta em Prolog é sempre uma seqüência composta por um ou mais objetivos precedida por um ?-. ƒ Para obter a resposta, o sistema Prolog tenta satisfazer todos os objetivos que compõem a consulta, interpretando os como uma conjunção. ƒ Satisfazer um objetivo significa demonstrar que esse objetivo é verdadeiro, assumindo que as relações que o implicam são verdadeiras no contexto do programa. ƒ Se a questão também contém variáveis, o sistema Prolog deverá encontrar ainda os objetos particulares que, atribuídos às variáveis, satisfazem a todos os sub-objetivos propostos na consulta. ƒ A particular instanciação das variáveis com os objetos que tornam o objetivo verdadeiro é então apresentada ao usuário. ƒ Se não for possível encontrar, no contexto do programa, nenhuma instanciação comum de suas variáveis que permita derivar algum dos sub-objetivos propostos então a resposta será "não". ƒ O sistema Prolog aceita os fatos e regras como um conjunto de axiomas e a consulta do usuário como um teorema a ser provado. ƒ A tarefa do sistema é demonstrar que o teorema pode ser provado com base nos axiomas representados pelo conjunto das cláusulas que constituem o programa.

Exercícios:

  1. Escreva um programa Prolog para representar o seguinte:

_1. João nasceu em Pelotas e Jean nasceu em Paris.

  1. Pelotas fica no Rio Grande do Sul.
  2. Paris fica na França._
  3. Só é gaúcho quem nasceu no Rio Grande do Sul.

André Abe Vicente

  1. Escreva um programa em prolog, utilizando a arvore genealógica acima, para representas as relações de : pai, mãe, filho, filha, tio, tia, primo, avo e cunhada.

RECURSÃO

Para exemplificar o funcionamento serão construídas duas relações de antepassados: antepassados direto e indireto. Direto (pai):

Para todo X e Z X é antepassado de Z se X é progenitor de Z.

Em Prolog:

antepassado(X, Z) :- progenitor(X, Z).

Avô: antepassado(X, Z) :- progenitor(X, Y), progenitor(Y, Z).

Bisavô antepassado(X, Z) :- progenitor(X, Y1), progenitor(Y1, Y2), progenitor(Y2, Z).

Tataravô antepassado(X, Z) :- progenitor(X, Y1), progenitor(Y1, Y2),

  • Construção muito grande;
  • Só funciona até um determinado limite (profundidade)

Recursão:

  • Correta para a relação antepassado que não apresenta qualquer limitação.
  • Definir a relação em termos de si própria;

Para todo X e Z X é antepassado de Z se existe um Y tal que

André Abe Vicente

Exemplos:

  1. Por exemplo, os termos data(D, M, 1994) e data(X, março, A) unificam. Uma instanciação que torna os dois termos idênticos é:

D é instanciada com X; M é instanciada com março; A é instanciada com 1994.

ƒ Por outro lado, os termos data(D, M, 1994) e data(X, Y, 94) não unificam, assim como não unificam data(X, Y, Z) e ponto(X, Y, Z).

triângulo(ponto(1, 1), A, ponto(2, 3))

com

triângulo(X, ponto(4, Y), ponto(2, Z))

ƒ O processo de unificação começa pela predicado (o functor principal). Como ambos os functores unificam, o processo parte para a unificação dos argumentos, onde a unificação dos pares de argumentos correspondentes ocorre. Assim o processo completo pode ser visto como a seguinte seqüência de operações de unificação simples: triângulo = triângulo ponto(1, 1) = X A = ponto(4, Y) ponto(2, 3) = ponto(2, Z)

O processo completo de unificação é bem sucedido porque todas as unificações na seqüência acima também o são. A instanciação resultante é:

X = ponto(1, 1) A = ponto(4, Y) Z = 3 e.

OPERADORES E ARITMÉTICA

Tipos de operadores do prolog

ƒ Os nomes dos operadores são átomos e sua prioridade encontra-se delimitada por valores inteiros cujo intervalo depende da implementação.

ƒ Assumiremos aqui que esse intervalo varie entre 1 e 1200. Há três tipos básicos de operadores, conforme a tabela abaixo:

Tipos de Operadores Prolog

André Abe Vicente

OPERADORES TIPO

Infixos xfx xfy yfx Prefixos fx fy - Posfixos xf yf -

Operadores Pré-definidos

:- op(1200, xfx, ':-'). :- op(1200, fx [':-', '?-']). :- op(1100, xfy, ';').

:- op(1000, xfy, ','). :- op( 700, xfx, [is, =, <, >, =<, >=, ==, ==, ==, =:=]). :- op( 500, yfx, [+, -]). :- op( 500, fx, [+, -, not]). :- op( 400, yfx, [,/,div]). :- op( 300, xfx, mod). :- op( 200, xfy, ^).*

ƒ Prioridade se dará da esquerda para direita que pode ser modificada com parênteses ( ).

ƒ Operadores também podem ser definidos pelo programador, sendo realizada por um tipo especial de cláusulas, denominadas diretivas , que atuam como definidoras de operadores. Exemplo: :- op(600, xfx, tem).

Isso informa ao sistema que se deseja usar tem como um operador de prioridade 600 e cujo tipo é "xfx".

ARITMÉTICA

ƒ O enfoque de Prolog é a computação simbólica, onde as necessidades de cálculo são comparativamente modestas.

ƒ Assim, o instrumental da linguagem Prolog destinado a computações numéricas é algo simples. Alguns operadores pré-definidos:

ƒ OPERADOR PRIORIDADE TIPO SIGNIFICADO + 500 yfx adição

- 500 yfx subtração

André Abe Vicente

tan(X) Tangente de X round(X,N) Arredonda X para N casas decimais Pi Valor de p com 15 casas decimais Random Um número aleatório entre 0 e 1

Exemplos

a) Computar o máximo divisor comum de dois números. Dados dois inteiros positivos, X e Y, seu máximo divisor comum D pode ser encontrado segundo três casos distintos:

(1)Se X e Y são iguais, então D é igual a X;

(2)Se X<Y, então D é igual ao mdc entre X e a diferença X-Y; (3)Se X>Y, então cai-se no mesmo caso (2), com X substituído por Y e vice-versa.

As três cláusulas Prolog que que expressam os três casos acima são:

mdc(X, X, X). mdc(X, Y, D) :- X < Y, Y1 is Y-X, mdc(X, Y1, D). mdc(X, Y, D) :- X > Y, mdc(Y, X, D).

Informática Inteligência Artificial Suzan Kelly Borges Piovesan Lista de Exercícios 001 Nome

  1. Escreva um predicado valida_compra/3 que verifica se uma compra de um cliente é válida. Os argumentos devem ser o cliente, o item e a quantidade solicitada. O predicado deve ter sucesso apenas se o cliente for um cliente válido e com uma boa taxa de crédito e quantidade do item esteja em estoque em estoque e a quantidade solicitada seja inferior ao estoque disponível.
  2. Escreva um predicado bhaskara/3 que deve receber os três coeficientes de um polinômio de grau dois e apresentar as duas raízes possíveis. Utilize a fórmula de Bháskara, que é dada por:

A x B B^ AC

A x B B AC

2

4

2

4

2 2

2 1

= − −^ −

= − + −

  1. Escreva um predicado maior/3 que recebe dois valores nos dois primeiros argumentos e retorna o maior deles no terceiro argumento.
  2. Escreva um predicado volume_esfera(R,Volume) que devolve em Volume o volume da esfera de raio R. O volume é

dado por 3 3

V = π R

  1. Escreva um predicado distancia(X1,Y1,X2,Y2,D) onde D deve ser a distância entre os pontos (X1,Y1) e (X2,Y2) no plano cartesiano. A distância é dada por D = ( X 2 − X 1 )^2 +( Y 2 − Y 1 )^2
  2. Se o peso de um corpo é dado por P = mg , onde m é a massa indicada em Kg e g é aceleração da gravidade. Considerando que a aceleração da gravidade na Terra é de 9,8 m/s^2 e a aceleração na Lua é de , escreva um predicado

André Abe Vicente

peso(Massa,Local,Peso) que deve indicar o peso de um corpo, sendo informada sua massa e o local onde tal corpo se encontra.

  1. Uma pessoa empresta uma certa quantia em dinheiro a uma taxa de juros de 12,5% ao mês, se o montante emprestado for inferior a $1000,00 e 9,8% em caso contrário. Escreva um predicado débito(Montante,Meses) que escreve o valor devido pelo tomador do empréstimo. %LISTA 1 //////////////////////////////// %EX. 1 nasceu(joao,pelotas). nasceu(jean,paris). fica(pelotas,rio_grande_sul). fica(paris,franca). gaucho(X):- nasceu(X,Y), fica(Y,rio_grande_sul).

%EX. 2 progenitor(joao,jose). progenitor(joao,ana). progenitor(maria1,jose). progenitor(jose,julio). progenitor(maria2,julio). progenitor(ana,cris). femea(maria1). femea(maria2). femea(ana). femea(cris). macho(joao). macho(jose). macho(julio). pai(X,Y):- macho(X),progenitor(X,Y). mae(X,Y):- femea(X),progenitor(X,Y). filho(X,Y):- macho(X),progenitor(Y,X). filho(X,Y):- femea(X),progenitor(Y,X). tio(X,Y):- macho(X),progenitor(Z,X),progenitor(Z,W),progenitor(W,Y). tia(X,Y):- femea(X),progenitor(Z,X),progenitor(Z,W),progenitor(W,Y). primo(X,Y):-

macho(X),progenitor(Z,I),progenitor(Z,K),progenitor(I,X),progenitor(K,Y). avo(X,Y):- macho(X),progenitor(X,K),progenitor(K,Y). casado(X,Y):- progenitor(X,K),progenitor(Y,K). cunhada(X,Y):- femea(X),casado(X,K),filho(K,Z),filho(Y,Z). cunhada(X,Y):- femea(X),casado(Y,K),filho(K,Z),filho(X,Z).

%LISTA ARITIMÉTICA ////////////////////////////////

%EX. 1 cliente(joao,700). cliente(maria,1000). item(sabao,20,5). item(bombril,80,10).

validacompra(Cli,Item,Qtdsol):- cliente(Cli,Cred), item(Item,Qtd,Preco),

André Abe Vicente

inverter([], []). inverter([X | Y], Z) :- inverter(Y, Y1), conc(Y1, [X], Z).

%Sublistas sublista(S, L) :- conc(L1, L2, L), conc(S, L3, L2).

%permutacao

permutar([], []). permutar([X | L], P) :- permutar(L, L1), inserir(X, L1, P).

%tamanho

tamanho([_ | R], N) :- tamanho(R, N1), N is N1+1.

%soma soma([], 0). soma([X | Y], S) :- soma(Y, R), S is R+X.

%produto

produto([], 0). produto([X], X). produto(L, P) :-

prod(L, P). prod([], 1). prod([X | Y], P) :- prod(Y, Q), P is Q*X.

mostra(X,Y):- % write('digite seu nome e depois digite .'),

write('seu nome é'), nl, write(X), write('sua idade é'), write(Y).

Apêndice A [Slides Representação de Conhecimento]

Apêndice B [Slides Listas]