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

sirsomething

[Prolog] Contador

Mensagens Recomendadas

sirsomething

Olá e boas tardes a todos.

Gostaria que me tirassem uma dúvida.

Tenho uma lista com a seguinte estrutura:

L=[via(porto,lisboa,_),via(braga,faro,_),via(guimaraes,santarem,_)]

sendo que tenho outra lista com o formato:

cidade(lisboa,_,_,A)

Como é que eu consigo fazer um contador que, buscando a lista das vias e posteriormente acedendo às cidades, me incremente uma variável cada vez que a variável A é igual a um parametro que eu requeri anteriormente ao utilizador?

Tentei utilizar este código mas não consigo compreender porque é que não funciona.

contador([], 0,[]).
contador([via(A,_,_)|R], Tot,Regiao):- cidade(A,_,_,Reg1),Reg1==Regiao,
			 Tr is Tot + 1,
			 contador(R,Tr,Regiao).

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

não dá para perceber o que estás a tentar fazer, assim como existem vários problemas no teu código :


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sirsomething

Bem, com esta lista:

A = [via(porto, braga, 5), via(braga, guimaraes, 9), via(guimaraes, alverca, 7), via(alverca, faro, 10)] ;

Com estes factos:

cidade(porto,portugal,40,litoral).
cidade(braga,portugal,350,interior).
cidade(guimares,portugal,40,litoral).
cidade(alverca,portugal,30,valedotejo).
cidade(santarem,portugal,25,valedotejo).
cidade(faro,portugal,20,litoral).
cidade(sevilha,espanha,60,interior).

estou a tentar fazer o seguinte:

?-contador(A,Tot,litoral).
false.

Basicamente, estou a tentar o contar o número de cidades que têm como parâmetro o A (cidade(_,_,_,A)).

Editado por Rui Carlos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

como disse existem vários problemas no teu código:

- o primeiro predicado nao faz sentido porque o terceiro argumento não é uma lista.

- avaliar uma perdicado (nesta situação) é como ter de verificar o lado de uma moeda, existe sempre dois lados : o verdadeiro e o falso para os quais terá sempre de existir um perdicado para ser possivel percorrer a lista.

- o o operador \is(2) deverá ser aplicado de um valor conhecido (lado direito) a um não conhecido (lado esquerdo).

- no final, "Reg1 == Regiao" não faz absolutamente nada


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação 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 os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.