Matlab - Rotar una lista a la derecha en PROLOG

 
Vista:

Rotar una lista a la derecha en PROLOG

Publicado por Javier (1 intervención) el 25/09/2019 04:36:05
Buenos dias, estoy haciendo un trabajo con listas y necesito rotar la lista hacia la derecha. En mi codigo solo rota a la izquierda. Que le deberia cambiar a mi codigo o que deberia agregar?
1
2
3
4
CA=cabeza de la lista, CO=cola de la lista, L=longitud, X=numero de veces que rota
 
rotar(X,X,0).
rotar([CA|CO],L,X):-X1 is X-1, append(CO,[CA],CO1), rotar(CO1, L, X1).
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

Rotar una lista a la derecha en PROLOG

Publicado por Barba_Azul (1 intervención) el 20/09/2022 07:00:17
elimina_ultimo([X|Xs],L):- reverse([X|Xs],[_|Ys]),reverse(Ys,L). %Para elminar el ultimo elemento de la Lista, lo devuelve en L

rotar(X,0,X). %Caso Base

rotar([Y|Ys],N,X):-N<0,N1 is N+1, append(Ys,[Y],L), rotar(L, N1, X),!. % Rota Hacia la Izq.

rotar([Y|Ys],N,X):-N>0,N1 is N-1, last(Ys,Ultimo), elimina_ultimo([Y|Ys],Aux), % Rota Hacia la Der.
append([Ultimo],Aux,L), rotar(L, N1, X),!.

------------
Lo anterior lo hice de acuerdo a un inciso similar que me habian dado:

Inciso: Definir un predicado rotar(+L, +N, -R), tal que R sea la lista L rotada N posiciones (la rotación se
debe hacer hacia la derecha si N>0 y hacia la izquierda si N<0). Ejemplos:

rotar([1, a, 2, b, 3], 3, X) debe dar como respuesta X = [2, b, 3, 1, a]
rotar([1, a, 2, b, 3], -3, X) debe dar como respuesta X = [b, 3, 1, a, 2]

Espero le sirva a alguien despues de 3 años jaja.
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