3.3. Concatenación.
1. Escriba una meta, usando concat, para eliminar los tres últimos elementos de una lista
L produciendo otra lista L1. Recomendación: L es la concatenación de L1 y una lista de
tres elementos.
2. Escriba una secuencia de metas para eliminar los tres primeros elementos y los tres
últimos elementos de una lista L produciendo la lista L2.
3. Defina la relación:
ultimo( Elemento, Lista)
de tal modo que Elemento sea el último elemento de la lista Lista. Escriba dos versiones:
(a) usando la relación concat, y (b) sin usarla.
PREGUNTEMOS:
1 ?- ultimo(d,[a,c,e,f,d,f]).
false.
2 ?- ultimo(a,[d,e,g,h,f,a]).
true .
3 ?- ultimo(a,[a,a,a,a,a,a,a,a]).
true .
4 ?- ultimo(6,[2,3,4,5,1,7,6,2]).
false.
5 ?- ultimo(pedro,[alejandro,carlos,alberto,antonio,pedro]).
true .
PREGUNTEMOS:
1 ?- eliminaultimo( [x,y,z,r,s,t], X, L).
2 ?- eliminaultimo( [1,2,3,4,5,6], 7, L).
3.4. Aritmética.
1. Defina la relación max(X,Y,Max) de tal modo que Max sea< el mayor valor de los
dos números X y Y.
max(X,Y,Max).
max(X,Y,Max):-X<Max,Y<Max.
2. Defina el predicado maxlist(List, Max) de tal manera que Max sea el mayor
número de la lista List de números.
maxlist(List,Max).
maxlist(List,Max):-Max>List.
3. Defina el predicado sumlist(List, Sum) donde Sum es la suma de una lista de
números dada en List.
sumlist(List,Sum).
List([X,Y,Z]).
sumlist(List,Sum):-X is Y is Z=:=Sum.
4. Defina el predicado ordenada(List) el cual es cierto (devolverá yes) si List es una
lista ordenada de números en forma ascendente o descendente, por ejemplo,
?- ordenada(1,5,6,6,9,12).
Yes
ordenada(List).
List(X,Y,Z).
ordenada(List):-X<Y<Z=:=ascendente.
ordenada(List):-X>Y>Z=:=descendente.
5. Defina el predicado subsum(Set, Sum, Subset) donde Set es una lista de números,
Subset es un subconjunto de esta lista y Sum es la suma de los números en
Subset. Por ejemplo,
?- subsum([1,2,5,3,2], 5, Sub).
Sub = [1,2,2];
Sub = [2,3];
Sub = [5];
subsum(set,Sum,Subset).
subsum(Set,Sum,Subset):-Set=:=[X,Y,Z],Sum=:= Y,Subset=:=Sub.