1. Construir los siguientes programas en lenguaje Prolog:
1. suma(Xs, P, I) donde P es la suma de los elementos pares de Xs e I la suma de
los elementos impares de Xs.
Ejemplo:
ß suma([1,2,5,2,6], P, I).
P = 10, I = 6
2. sumapos(Xs, P, I) donde P es la suma de elementos en posiciones pares de la
lista Xs e I la suma de elementos en posiciones impares.
Ejemplo:
ß suma([1,2,5,2,6], P, I).
P = 4, I = 12
3. pos(X, Xs, N) donde N es la posición del elemento X en la lista Xs.
Ejemplo:
ß pos(2,[1,2,5,2,6], N).
N=2;
N=4;
-------------
Se desea desarrollar un programa Prolog que permita intercalar los elementos de dos listas
considerando longitudes distintas para cada tramo de intercalación. Es decir, para cada lista se
indicará
la cantidad de elementos de la misma que se intercalarán sucesivamente para formar la lista
resultante,
por ejemplo:
� intercala([a1, a2, a3, a4, a5, a6], [b1, b2, b3, b4], 3, 2, [a1, a2, a3, b1, b2, a4, a5, a6, b3, b4]).
True
� intercala([a1, a2, a3, a4], [b1, b2], 4, 1, X).
X = [b1, a1, a2, a3, a4, b2]
Debe tenerse en cuenta que cada lista incluya la cantidad de elementos necesaria para ser
intercalada
correctamente y que cualquiera de ellas puede intercalar el tramo inicial o el tramo final.
Resolución:
intercala(L1, L2, N1, N2, R):- intercalar_lista(L1, L2, N1, N2, R).
intercala(L1, L2, N1, N2, R):- intercalar_lista(L2, L1, N2, N1, R).
intercalar_lista([], [], _N1, _N2, []).
intercalar_lista(L1, L2, N1, N2, Result):-
concatenar(PreL1, RestoL1, L1),
largo(PreL1, N1),
intercalar_lista(L2, RestoL1, N2, N1, X),
concatenar(PreL1, X, Result).
% las listas deben tener al menos 1 elemento:
2. largo([_X], 1).
largo([_X|Xs], N):- largo(Xs, N2), N is N2 + 1.
Ejemplos de consultas:
?– intercala([a1, a2, a3, a4, a5, a6], [b1, b2, b3, b4], 3, 2, [a1, a2, a3, b1, b2, a4, a5, a6, b3, b4]).
Yes
?– intercala([a1, a2, a3, a4, a5, a6], [b1, b2, b3, b4], 2, N, X).
N = 2, X = [a1, a2, b1, b2, a3, a4, b3, b4, a5, a6] ;
N = 1, X = [b1, a1, a2, b2, a3, a4, b3, a5, a6, b4] ;
No
?– intercala([a1, a2, a3, a4], [b1, b2], N, 1, X).
N = 2, X = [a1, a2, b1, a3, a4, b2] ;
N = 2, X = [b1, a1, a2, b2, a3, a4] ;
N = 4, X = [b1, a1, a2, a3, a4, b2] ;
No
--------
c(inicio,1).
c(1,2).
c(2,3).
c(3,4).
c(4,5).
c(5,6).
c(6,7).
c(4,8).
c(8,9).
c(9,10).
c(10,11).
c(11,fin).
c(A,B):-c(B,A).
ruta([inicio,X|Zs]):-c(inicio,X),ruta([X|Zs]).
ruta([X,Y|Zs]):-c(X,Y),ruta([Y|Zs]).
ruta([X,fin]):-c(X,fin),!.
-------------