• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

petrov3

PROLOG - Puzzle/Jogo

23 mensagens neste tópico

Boas,

Gostava de saber se alguem me pode ajudar... Tenho uma disciplina de Prolog na  universidade (Sistemas baseados em conhecimento) e tenho k fazer um jogo matematico/puzzle em prolog utilizando "procura via gerar testar " ou "procura num espaço de soluções "...

Alguem me pode dar uma sugestao de algum jogo k seja relativamente facil e simples para fazer? porque apenas tenho 1 semana e meia...

Um abraço e obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Jogos simples não faltam, desde o jogo do galo, à batalha naval, damas, xadrez, para referir os mais comuns..

Se queres implementar uma AI a batalha naval não te permite grandes técnicas de pesquisa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

no jogo do galo da para utilizar as tecnicas de pesquisa?talvez seja o mais simples.. *-)

ou as damas...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem..agora tenho outra duvida...

Como faço para inserir um facto atravez de uma resposta do utilzador?

por exemplo:

p(1,'Quer um Restaurante no centro?').

p(2,'Quer um restaurante com estacionamento?').

pergunta(N):-

                      p(N,Texto),

                      write(Texto),nl,

                      read(X).

pergunta(N1):-

                        N1 is N + 1,

                        pergunta(N1).

o que falta/deve ser mudado neste codigo??

e queria que ele me inserisse dinamicament(consoante a resposta do ultizador) os factos...

por exemplo:

se resposta  'sim' ----> assert(fact(localizacao_centro)).

se resposta  'nao' ----> assert(fact(localizacao_periferia)).

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pergunta:-	repeat,
	write('Quer um restaurante no centro?'),nl,
	write('1 - Sim'),nl,
	write('2 - Nao'),nl,
	write('3 - Sair'),nl,
  	read(X),
  	processa(X),
	X==3,!,write('Adeus').

processa(1):-assert(fact(localizacao_centro)),!.
processa(2):-assert(fact(localizacao_periferia)),!.
processa(3):-!.
processa(_):-write('Opcao invalida!'),nl,nl.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pergunta:-	repeat,
	write('Quer um restaurante no centro?'),nl,
	write('1 - Sim'),nl,
	write('2 - Nao'),nl,
	write('3 - Sair'),nl,
  	read(X),
  	processa(X),
	X==3,!,write('Adeus').

processa(1):-assert(fact(localizacao_centro)),!.
processa(2):-assert(fact(localizacao_periferia)),!.
processa(3):-!.
processa(_):-write('Opcao invalida!'),nl,nl.

antes de mais, muito obrgado pela resposta!!esta muito porreiro!!

O problema é que assim so da pa fazer para uma pergunta..e eu queria varias...

E as diferentes perguntas inserem diferentes factos..

Mais uma vez, obrigado!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se eu tirar o repeat, e fizer isto, para todas as perguntas, mudando o processa para processa1, processa2,processa3......

Funciona, fica com bastante codigo, mas funciona...Ou ha outra alternativa melhor?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tem que ser mesmo assim, porque os factos que vais escrever na base de conhecimento vão depender das diferentes respostas que podes dar às diferentes perguntas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

obrigado! Ta optimo!! Deste-me uma grande ajuda!!

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

So agora vi k estudas na UMinho..eu tb estudo..!! em IG (agora TSI) ...hehe

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

as vezes metes k e outras metes que. no que escreves. estou a dizer para usares que. fica mais bonito e mais apresentavel. lol.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Preciso de ajuda urgentemente!

Alguém me consegue arranjar um programa que simule um leilão, usando de preferência OPP... Em PROLOG!

Se alguem tiver isso..que me diga algo por favor, é muito importante!

cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Lol isso é da minha disciplina!!

E do meu Professor... :P

O problema é que um colega do meu grupo ficou de fazer esta parte, e claro, nao fez...e a apresentação é quarta..

Tenho 3 tarefas completas, mas ja nao tenho tempo para fazer a ultima! Por isso pedi!

Mas obrigado pela resposta!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá....sou novo por aqui, e vi a conversa de vc's sobre o prolog, e precisaria muito ajuda pra resolver o seguinte problema:

A questão é: COMO FORMULAR A PERGUNTA AO PROGRAMA PRA ME DAR A RESPOSTA?

Me ajudem por favor!!!

Quando Alice entrou na “Floresta Encantada”, ela não se esqueceu de tudo, somente de

algumas coisas. Uma das coisas que ela mais facilmente esquece é o dia da semana. O leão e o unicórnio

são duas criaturas bastante estranhas, que também frequentam a “Floresta Encantada”. É sábido que o

leão mente as segundas, terças e quartas, e fala a verdade nos outros dias da semana, enquanto que o

unicórnio mente nas quintas, sextas e sábados, mas fala a verdade nos outros dias da semana.

Um dia Alice encontrou o leão e o unicórnio descansando sob uma árvore, e pergunta a ambos

qual o dia da semana e recebe as seguintes respostas:

Leão : Ontem foi o meu dia de mentir.

Unicórnio : Ontem foi o meu dia de mentir.

Diante destas declarações, Alice que era uma garota inteligente, verificou que poderia deduzir o

dia da semana. Qual era o dia

mente(leao,segunda).

mente(leao,terca).

mente(leao,quarta).

mente(unicornio,quinta).

mente(unicornio,sexta).

mente(unicornio,sabado).

depois(segunda,domingo).

depois(terca,segunda).

depois(quarta,terca).

depois(quinta,quarta).

depois(sexta,quinta).

depois(sabado,sexta).

depois(domingo,sabado).

ouk :- K=leao;K=unicornio.

ouj :- J=leao;J=unicornio.

resposta :-

depois(X,A),

mente(J,X),

mente(K,A),

not(mente(K,X)),

not(mente(J,A)),

nl,nl,write("Alice deduz: "),

nl,write(X).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Por acaso já resolvi esse problema, mas em vez de um leão e um unicórnio, tinha um coelho e um cuco:

mente(coelho,seg).
mente(coelho,ter).
mente(coelho,qua).
mente(cuco,qui).
mente(cuco,sex).
mente(cuco,sab).

ontem(seg,ter).
ontem(ter,qua).
ontem(qua,qui).
ontem(qui,sex).
ontem(sex,sab).
ontem(sab,dom).
ontem(dom,seg).

frase(A,D):-mente(A,D2),ontem(D2,D),\+mente(A,D).
frase(A,D):-mente(A,D),ontem(D2,D),\+mente(A,D2).

diadehoje(X):-frase(cuco,X),frase(coelho,X).

Primeiro temos o predicado mente que indica o dia em que cada personagem mente.

Depois temos o predicado ontem que estabelece a relação temporal entre os vários dias da semana.

Depois o predicado frase constituído que tem 2 parâmetros (personagem e dia) e que possui 2 cláusulas na sua definição.

Na 1ª cláusula verificamos se a personagem A mentiu ontem (D2), mas não mente hoje (D). Na 2ª verificamos se a personagem A mente hoje (D) mas não mentiu ontem(D2). A negação é obtida através do operador \+.

Por fim escrevemos o predicado final diadehoje que, vai instanciar X com o dia da semana que vai ser obtido de invocar o predicado frase sobre as personagens cuco e coelho. Como neste predicado invocamos frase(cuco,X),frase(coelho,X), vai ser feito um varrimento à base de conhecimento de modo a instanciar X com o único dia possível que verifique o predicado frase para cada uma das personagens.

Resultado: Quinta-feira.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nossa!

Brother muitíssimo obrigado!

Só tenho mais uma dúvida, quando eu compilar esse código no prolog, como faço a pegunta?

vou direto escrevendo, "diadehoje(sab)" por exemplo, até chegar em "diadehoje(qui)" e ele me responder yes? Como funciona?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fazes: diadehoje(Dia).

E ele instancia Dia com o resultado.

Dia = qui

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

rsrs....valeu brother.. vc me ajudou muito!

É porque eu não to apanhado muito nesse prolog pq o meu professor é muito fdp, e nem ensinou como usar essa ferramenta...

o que eu perguntei foi se quando eu colocar o código que vc me passou no win prolog, clicar em query, como devo fazer a pergunta à ferramenta, para ela me dar o dia correto?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não colocas este código no swi-prolog. O que tens de fazer é abrir um ficheiro de texto e colocar lá o código que indiquei e depois gravas com a extensão .pl (ou outra que tenhas definido aquando da instalação do swi-prolog). O ícone que representa o ficheiro deve então ficar com a figura representativa de um ficheiro Prolog. Fazes então duplo clique nesse ficheiro para ele abrir com o swi-prolog. Depois, já com o swi-prolog aberto, fazes: diadehoje(Dia). (com o ponto final no fim), e deve aparecer o resultado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora