Foros del Web » Programación para mayores de 30 ;) » Programación General »

Evitar la reevaluación en Prolog

Estas en el tema de Evitar la reevaluación en Prolog en el foro de Programación General en Foros del Web. 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 ...
  #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!
  #2 (permalink)  
Antiguo 03/09/2010, 07:52
 
Fecha de Ingreso: septiembre-2010
Mensajes: 60
Antigüedad: 14 años, 3 meses
Puntos: 5
Respuesta: Evitar la reevaluación en Prolog

Siento responder tarde. Tal vez sirva de algo de todos modos.
Una posibilidad es llevar una lista de las polaridades ya acumuladas y comprobar que no se han acumulado antes de acumularlas.

¿Cuál es la consulta que realizas?

Etiquetas: prolog
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:58.