Prolog - necesito AYUDA CON PROLOG...me esta volviendo loca!

 
Vista:

necesito AYUDA CON PROLOG...me esta volviendo loca!

Publicado por kisha (1 intervención) el 17/04/2013 20:49:21
Hola a tod@s,

tengo unos predicados que me estan volviendo loca, llevo ya bastante tiempo dandoles vueltas y no logro dar con la solución, por lo que no se si alguien podria ayudarme con alguno de ellos, orientarme o conoce a alguien que sepa de Prolog para que pueda echarme una mano.

Los prediecados q no consigo sacar son:

filtrar_secuencias(N,L1,L2):
cierto si L2 es la lista que contiene los elementos de L1 que pertenecen a las secuencias de al menos N elementos iguales consecutivos.
-------------------------------------------------------------------------------------------------
?- filtrar_secuencias(3,[a,b,b,b,c,a,a,a,b,b,b,b,c,c,d],L).
L = [b,b,b,a,a,a,b,b,b,b] ;
No
?- filtrar_secuencias(4,[a,b,b,b,c,a,a,a],L).
L = [] ;
No
?- filtrar_secuencias(2,[],L).
L = [] ;
No



agrupar_coordenadas(L1,L2):
cierto si L1 es una lista de pares de abscisa-ordenada y L2 es una lista de pares, donde el primer elemento de cada par es una abscisa y el segundo elemento es la lista de ordenadas que aparecen en L1 asociadas a esa abscisa, ordenadas de menor a mayor.
--------------------------------------------------------------------------------------------------------
?-agrupar_coordenadas([(3,2),(2,3),(3,4),(3,3)], [(3,[2,3,4],(2,[3])])
Yes



insertar(L1,P,L2):
cierto si L1 es una lista de pares, donde el primer elemento de cada par es un número (valor de la abscisa) y el segundo es una lista de números (ordenadas asociadas al valor de la abscisa) (por ejemplo, [(1,[2,3]), (2,[4,3])]), P es un par de dos números, el primero el valor de una abscisa y el segundo el de una ordenada (por ejemplo, (2,1)) y L2 es la lista L1 con la nueva incorporación de la ordenada de P a la lista de ordenadas asociada en L1 a la abscisa de P, si es que ya existía la abscisa, (en el ejemplo anterior: [(1,[2,3]), (2,[4,3,1])]), y de no existir la abscisa, L2 es la lista L1 con el nuevo par que indica P al final.
---------------------------------------------------------------------------------------------------------------
?- insertar([(1,[2,3]), (2,[4,3])],(2,1),L).
L =[(1,[2,3]), (2,[4,3,1])] ;
No
?- insertar([(1,[2,3]), (4,[4,3])],(3,1),L).
L =[(1,[2,3]), (4,[4,3]), (3,[1])] ;
No



filtrar(L1, L2, Prop, L3):
cierto si L3 es la lista con los elementos de L1 (en el mismo orden), que cumplen a la vez las siguientes condiciones:

a) La propiedad Prop
b) Su posición en la lista L1 viene indicada por alguno de los elementos de la lista L2.
La propiedad se especificará mediante el nombre de un predicado de aridad 1.
Ejemplo: si tenemos un predicado par(X) que es cierto si X es un número par, entonces:

------------------------------------------------------------------------------------------------------

?-filtrar([1,3,5,2,7,3,2,8],[2],par,L).
L = []
?-filtrar([1,3,5,2,7,3,2,8],[4],par,L).
L = [2]
?-filtrar([1,3,5,2,7,3,2,8],[1,4],par,L).
L = [2]




todas_alternadas(L,LLA)
: cierto si LLA es una lista que contiene todas las listas alternadas que se pueden formar con los elementos de L (considerando que L es una lista de números enteros distintos entre si). Para realizar este predicado, implementar antes el siguiente:

alternar(L,LA): cierto si dada L, una lista de números enteros distintos entre si, LA es una lista alternada que se puede formar con los elementos de L. Una lista es alternada si cada elemento está entre dos que son mayores que él, o entre dos que son menores que él. Si L es una lista de dos elementos, cualquier combinación de ellos se considera una lista alternada. Este predicado debe devolver por backtraking todas las listas alternadas que se pueden formar a partir de L.
--------------------------------------------------------------------------------------------

?- todas_alternadas([3,1,2],L).
L = [[3, 1, 2], [1, 3, 2], [2, 3, 1], [2, 1, 3]] ;
No

?- alternar([],L).
L = [] ;
No
?- alternar([1,2],L).
L = [1, 2] ;
L = [2, 1] ;
No
?- alternar([3,2,1],L).
L = [2, 3, 1] ;
L = [2, 1, 3] ;
L = [3, 1, 2] ;
L = [1, 3, 2] ;
No

Estoy ahora con alternar, pero no logro obtener todas las soluciones que debería, por lo que si alguien sabe o pudiera ayudarme, o conoce a alguien que quiizas pudiera o supiera de Prolog, os rogaría que me echarais una mano ya que se me esta acabando el tiempo...os lo agradecría muchísimo!!!!!!!!!!!!
mi correo es: [email protected]

un saludo y muuuuchas gracias!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder