Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/08/2010, 07:54
puf
 
Fecha de Ingreso: agosto-2010
Mensajes: 3
Antigüedad: 14 años, 4 meses
Puntos: 0
Evitar la reevaluación en Prolog

Hola a todos,

ya sé que estoy siendo una pesada con mis problemas de Prolog, pero necesito entregar mi programa la semana que viene y sigue sin salirme del todo.

El único problema que me queda por resolver es el siguiente. Mi código es este:

polaridad(completos,1).
polaridad(y,0).
polaridad(amplios,1).
polaridad(menus,0).



acumulador([_|Y],Ac1,L):-
polaridad(W,Z),
Ac1 is Ac1+Z,
acumulador(Y,Ac1,L).

acumulador([],Ac1,Ac1).

Con esta regla recursiva consigo que me vaya leyendo los valores de las reglas de polaridad y los vaya sumando en el acumulador Ac1. El problema es que una vez que llega a la segunda palabra de la lista que introduce el usuario, vuelve a evaluar el hecho "polaridad(completos,1)" por lo que suma 1 a Ac1, cuando lo que tendría que hacer es sumarle 0 (como le corresponde a y).

¿Alguien tendría alguna idea acerca de cómo evitar que vuelva a evaluar un hecho ya evaluado??

A mí lo único que se me ocurre es poner un "cut" (!) en algún sitio, pero no sé dónde narices ponerlo...


Muchas gracias!


Un saludo!