Posts com Tag ‘prolog’

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