Prolog, linguagem orientada à programação lógica

Publicado: 24/05/2010 em Lógica de Predicados, Paradigmas de LP, Sistemas de Informação
Tags:, ,

A uma semana atrás tivemos uma apresentação interessante na aula de paradigmas de linguagem de programação, que nos apresentou a linguagem de programação Prolog, a aula foi ministrada pelos colegas Rafael, Elias e Jonas.

O Prolog é uma linguagem de programação lógica,  funciona com cálculos de predicados. Para os que não lembram dos cálculos de predicados das aulas de lógica de predicados o negócio funciona assim:dado alguns predicados podemos inferir ou tirar como conclusão alguma coisa, claro que essa alguma coisa tem que ter lógica (meio redundante isso).

um exemplo de calculo de predicado:

1. Todo amigo de Carlos é amigo de Jonas.
Pedro não é amigo de Jonas.
Logo, Pedro não é amigo de Carlos.

Para testar o prolog, basta instalar o swipl no ubuntu digitando o comando sudo aptitude install swipl

Uma coisa interessante no prolog é que ele especifica como deve ser a solução, ao invés de dar o algarismo para sua resolução. A solução se obtém mediante busca aplicando a lógica de predicados.

Um exemplo de programa usando prolog:

  • gosta(joão, jazz).
  • gosta(joão, renata).
  • gosta(joão, lasanha).
  • gosta(renata, joão).
  • gosta(renata, lasanha).

Poderiamos então fazer as seguintes perguntas:

gosta(joão, jazz),João gosta de jazz?

gosta(renata, lasanha). renata gosta de lasanha?

Agora é só deixar a imaginação fluir um pouco.

A atividade da semana foi: fazer um programa que fizesse os cálculos de fibonacci.

cheguei aos seguinte algorítimo recursivo:

  • fib(0, 0). /*para a sequência iniciada por 0, teremos como sucessão 0*/
  • fib(1, 1). /*para a sequência iniciada por 1, teremos como sucessão 1*/
  • fib(X, Y) :-
  • X > 1, /*para a sequência iniciada por X sendo x>1 */
  • X2 is X – 2, fib(X2, Y2), /* X2 recebe o valor x-2 e faz o fibonacci de forma recursiva de X2 que retorna   Y2*/
  • X1 is X – 1, fib(X1, Y1), /* X1 recebe o valor x-1 e faz o fibonacci de forma recursiva de X1 que retorna Y1*/
  • Y is Y1 + Y2.  /* por fim Y recebe como requerido no cálculo de fibonacci a soma dos dois valores precedentes */

/*cada número subseqüente é igual à soma dos dois números precedentes da seqüência própria*/

As peguntas que podem ser feitas são:

fib(8, X), qual o primeiro número da sucessão de fibonacci em  8? Os 100 primeiros números da sequencia fibonacci

outros detalhes e exemplos podem ser encontrados na apresentação sobre prolog.

Apresentação aula de paradigmas Prolog

Anúncios
comentários
  1. la disse:

    Viva PROLOG ! kkkkkkkkk

  2. jaime disse:

    A linguagem utilizada foi Straweberry Prolog 3.0 Ligfht Edition

    Aonde foi que errei no codigo abaixo ??

    %Monte a base de dados e as regras de recursividade para
    %fazer o que se pede:

    dista(“A”,”B”,14).
    dista(“A”,”E”,12).
    dista(“B”,”C”,10).
    dista(“C”,”D”,6).
    dista(“C”,”F”,8).
    dista(“E”,”F”,15).
    dista(“F”,”G”,10).
    dista(“F”,”H”,4).

    1 questão – Somar a distancia

    caminho(X,Y,via(X,Y)):-distancia(X,Y,_).
    caminho(X,Y,[via(X,Z)|R]):-distancia(X,Z,_),caminho(Z,Y,R).

    ?-caminho(Z),write(Z).

    2 – Escolher a menor distancia.

    distancia(X,Y,D):-dista(X,Y,D).
    distancia(X,Y,D):-dista(X,Z,D1),distancia(Z,Y,D2),D is D1+D2.

    mindist(X,Y,D):-bagof(Di,distancia(X,Y,Di),LDi),min(LDi,D).

    min([X|R],X):-min(R,M),X=M.

    ?-mindist(X,Y,D),write(D).

  3. marconi disse:

    Gente alguem sabe alguma coisa sobre P#?
    sabe c o P# é a msm coisa do prolog
    email para comunicação:marconi.si92@yahoo.com.br

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s