Jump to content

[Prolog] Contador


sirsomething
 Share

Recommended Posts

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).
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.