August 29th, 2007Exemplos de Prolog
Prolog é uma linguagem de programação geralmente usada para inteligência artificial e linguística computacional.

Instalação e Uso
No Ubuntu há duas implementações de prolog disponíveis, a gprolog e a swi-prolog. Eu vou ficar com o swi-prolog que é um interpretador de prolog. Para instala-lo:
sudo apt-get install swi-prolog
Isso vai instalar o binário swipl que é o interpretador de Prolog.
Exemplo 1 - Fatorial
Crie um arquivo chamado fatorial.pl com esse conteúdo:
factorial(0,1).
factorial(N,F) :-
N>0,
N1 is N-1,
factorial(N1,F1),
F is N * F1.
Estando na mesma pasta do arquivo, chame o interpretador swipl:
$ swipl
Welcome to SWI-Prolog (Multi-threaded, Version 5.6.14)
Copyright (c) 1990-2006 University of Amsterdam.
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.For help, use ?- help(Topic). or ?- apropos(Word).
?- ['fatorial.pl'].
% fatorial.pl compiled 0.00 sec, 760 bytesYes
?-
O comando ['arquivo.pl']. (com ponto) vai carregar e interpretar um arquivo chamado arquivo.pl. Algumas “perguntas” que podemos fazer ao programa:
?- fatorial(0,1).
Yes
?- fatorial(10,What).
What = 3628800
Yes
As perguntas feitas foram:
- Fatorial de 0 é 1?
- Quanto é o fatorial de 10?
Exemplo 2 - Torres de Hanoi
O famoso problema das Torres de Hanoi. Num arquivo chamado hanoi.pl escreva:
move(1,X,Y,_) :-
write('Move top disk from '),
write(X),
write(' to '),
write(Y),
nl.
move(N,X,Y,Z) :-
N>1,
M is N-1,
move(M,X,Z,Y),
move(1,X,Y,_),
move(M,Z,Y,X).
Carregando o programa com ['hanoi.pl']. dentro do swipl podemos fazer o teste:
?- move(3,left,right,center).
Move top disk from left to right
Move top disk from left to center
Move top disk from right to center
Move top disk from left to right
Move top disk from center to left
Move top disk from center to right
Move top disk from left to rightyes
Exemplo 3 - Grafo
Suponha o seguinte grafo que será representado no código-fonte:

edge(1,2).
edge(1,4).
edge(1,3).
edge(2,3).
edge(2,5).
edge(3,4).
edge(3,5).
edge(4,5).
connected(X,Y) :- edge(X,Y) ; edge(Y,X).
path(A,B,Path) :-
travel(A,B,[A],Q),
reverse(Q,Path).
travel(A,B,P,[B|P]) :-
connected(A,B).
travel(A,B,Visited,Path) :-
connected(A,C),
C \== B,
\+member(C,Visited),
travel(C,B,[C|Visited],Path).
Vamos perguntar qual o caminho entre 1 e 5:
?- path(1,5,W).
W = [1, 2, 5]
Yes
De onde veio e para onde vai o caminho 1, 2, 5, 4.
?- path(DE, PARA, [1,2,5,4]).
DE = 1
PARA = 4
Yes
Referencias













September 19th, 2007 at 5:26 pm
Muito Obrigado mesmo rapaz!
Abriu minha mente pro Prolog…
Faz parte do Logia?!!
Se sim, então nos veremos ainda!
ABRAÇO
November 14th, 2007 at 11:25 am
Amigo ajuda tenho que entregar esse trabalho segunda po favor.Ja to fudido nessa disciplina
Um general do exército americano desenvolveu uma estratégia de ataque a guerrilhas terroristas
armadas localizadas em campos sitiados por recursos naturais, como ilhas, área planas limitadas por montanhas,
rios etc. A sua estratégia baseia-se em colocar grupos armados em pontos estratégicos o mais próximo possível
do inimigo, formando uma área retangular – área de “sufoco”. A figura abaixo, mostra três grupos de guerrilhas
e os grupos armados localizados de forma estratégica, definindo os pontos de sufoco.
Tarefa
Você deve desenvolver um programa que permita calcular os pontos onde serão posicionados os
grupos armados, de forma a cria a menor área disponível aos grupos terroristas. Além disso, o programa deve
calcular o tamanho dessa área em km2.
Entrada
A entrada é composta de uma base de fatos Prolog, contendo vários conjuntos de teste. Os conjuntos
de testes são formatos por: a) fato para descrever a área geográfica, sendo que a área geográfica é minimamente
formada por dois inteiros M e N que correspondem às dimensões em km da área geográfica; b) fato
descrevendo a localização das guerrilhas, sendo cada guerrilha descrita minimamente por dois inteiros X e Y
representando X e Y coordenadas de localização . Restrições: 0<M<100; 0<N<100; 0<x<M; e 0<y<N.
Exemplo de Entrada
Conjunto 1 Conjunto 2
Fato a 30 30 50 50
Fatos b 20 21
23 23
19 21
49 49
48 49
May 20th, 2008 at 8:31 pm
DAe kra to começando estudar prolog e esta complicado entender,pode me ajudar,não consegui um bom compilador,sera que pode me mandar o link de algum e o codigo fonte de alguns….valeuuu……obrigado…
October 3rd, 2008 at 5:32 pm
Lucas eu estou a começar também com prolog e uso swi-prolog mesmo e para windows uso e-texteditor mas pode usar um editor de texto qualquer, seja eles em windows, macOS ou linux