Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

petrov3

PROLOG - Puzzle/Jogo

Mensagens Recomendadas

petrov3    0
petrov3

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Warrior    68
Warrior

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
petrov3    0
petrov3

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous
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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
petrov3    0
petrov3

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!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
petrov3    0
petrov3

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
petrov3    0
petrov3

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
petrov3    0
petrov3

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!!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Dingo    0
Dingo

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).

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Dingo    0
Dingo

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Dingo    0
Dingo

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous

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.

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


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade