Prolog - ayuda.. tarea de prolog.. EJERCICIO2.. COMO HACERLO??

 
Vista:
sin imagen de perfil

ayuda.. tarea de prolog.. EJERCICIO2.. COMO HACERLO??

Publicado por NAYREEN (2 intervenciones) el 22/05/2015 20:51:57
Ejercicio 2.

Dada cierta lista cuyo alfabeto es {c,g,t,a} y un patrón (subsecuencia) dado, se desea un método que determine:

1. Si hay patrones repetidos.

2. Si al menos un par de tales patrones están separados por una distancia no mayor a un valor D dado.

3. Si hay mas de un par de patrones.

Condiciones:

Todos los patrones deben ser reportados. El método recibe como entrada la secuencia problema, Lp; el patrón a buscar, P (que puede ser de cualquier longitud); y la distancia máxima que debe verificarse. El método debe devolver la posición de los patrones hallados en pares y la distancia precisa que los separa. Por ejemplo, dados:

Lp=[a,a,a,a,c,c,c,g,a,a,a,a,t,t,t,t,g,c,c,c,g,g]. (Lista problema)

D=40 (Distancia máxima entre patrones)

P=[c,c,c] (Patrón a explorar)

Consulta Prolog:

?-patrones_rep([a,a,a,a,c,c,c,g,a,a,a,a,t,t,t,t,g,c,c,c,g,g], [c,c,c], 40, Ls).

Respuesta:

Ls=[(5,18,10)].

Nótese que si existiese otra ocurrencia, la solución podría ser:

Ls=[(5,18,10),(290,310,17)].

¿Cuál sería la solución en el siguiente caso?:

?-patrones_rep([a,a,a,a,c,c,c,g,a,a,a,a,t,t,t,t,g,c,c,c,c,c,a,a,a,a,c,c,c,g,a,a,a,a,t,t,t,t,g,c,c,c,c,c], [c,c,c], 40, Ls).

Trate de hallarla primero manualmente.
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
sin imagen de perfil

ayuda.. tarea de prolog.. EJERCICIO2.. COMO HACERLO??

Publicado por José (8 intervenciones) el 23/05/2015 19:47:03
Hola, no se que quieres decir con la distancia, pero te dejo una forma de empezar, espero te sirva :


1
2
3
4
5
/*saber si hay sublista */
 
sublista3(Xs,Ys):-append(_,Bs,Ys),append(Xs,_,Bs).
%contar ocurrencias, goal
contar(Xs,Ys,L) :-findall(Xs,sublista3(Xs,Ys),L).

esta es mi solución en swipl:
1
2
?- contar([c,c],[a,a,a,c,c,b,b,c,c],X).
X = [[c, c], [c, c]].

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar