Otros comandos con listas
Ademas de los comandos básicos para el uso de listas, existe otros comandos que también pueden ser de utilidad al desarrollar programas basados en estas estructuras de datos, en esta sección vamos a presentar algunos de ellos.
Max_member
Este comando sirve para identificar si el primer argumento es el elemento más grande de la lista dada en el segundo argumento. Si damos la siguiente consulta, obviamente el resultado será false, ya que 1 no es el valor más grande de la lista.
1 2 |
?- max_member(1, [1, 2,3]). false. |
Por el contrario, si damos la siguiente consulta, la respuesta será true, ya que 3 si es el elemento más grande de las lista.
1 2 |
?- max_member(3, [1, 2,3]). true. |
Por otro lado, si nosotros colocamos una variable M como primer argumento, POLOG devolverá el valor máximo de la lista, tal como se puede ver en el siguiente ejemplo.
1 2 |
?- max_member(M, [1, 2,3]). M = 3. |
Min_member
Prácticamente igual que el comando anterior, solo que reconoce los mínimos en lugar de los máximos, lo podemos ver por medio de los ejemplos:
1 2 |
?- min_member(M, [1, 2,3]). M = 1. |
1 2 |
?- min_member(1, [1, 2,3]). true. |
1 2 |
?- min_member(3, [1, 2,3]). false. |
Sum_list
Este comando, suma todos los elementos que se encuentran dentro de una lista y los devuelve en el segundo argumento, tal como podemos ver en el siguiente ejemplo:
1 2 |
?- sum_list([4,5,6,7],S). S = 22. |
Intersection
Este comando es verdadero si el tercer argumento, esta dado por la intersección de los argumentos uno y dos, en esta forma, la siguiente consulta da como resultado true:
1 |
?- intersection([1,2,3,4],[1,5,6],[1]). |
Sin embargo, al modificar la consulta en la siguiente forma, da como resultado false:
1 |
?- intersection([1,2,3,4],[1,5,6],[3]). |
Pero más interesante es cuando el tercer argumento se sustituye por una variable ya que esa variable toma la intersección de las listas, tal como se puede ver a continuación:
1 2 |
intersection([1,2,3,4],[1,5,6,2],X). X = [1, 2]. |
Ejercicio 1. Determinar la intersección de [1, 3, 4, 5, 6, 7, 3, 8 , 11, 38 ,28] y [4, 6 ,32, 89 ,5, 45, 38].
Union
Función que se comporta exactamente igual que la función anterior, pero trabajando con la unión de las listas, en vez de trabajar con la intersección. Esto se puede ver en los siguientes ejemplos:
1 2 |
?- union([1,2,3,4],[1,5,6],[3]). false. |
1 2 |
?- union([1,2,3,4],[1,5,6],[1,2,3,4,5,6]). false. |
1 2 |
?- union([1,2,3,4],[1,5,6],X). X = [2, 3, 4, 1, 5, 6]. |
Subset
Este comando interpreta si el primer argumento se comporta como un sub conjunto del segundo argumento, si no es un subconjunto, PROLOG devuelve el resultado false, el comportamiento se puede ver en los siguientes ejemplos:
1 2 |
?- subset([1,2], [1,2,3,4]). true. |
1 2 |
?- subset(X, [1,2,3,4]). X = [ ]. |
1 2 |
?- subset([3,4], [1,2,3,4]). true. |
Subtract
Este comando, devuelve la lista del tercer argumento después de haber eliminado el elemento del segundo argumento de la lista del primer argumento, esto se puede observar en los siguientes ejemplos:
1 2 |
?- subtract([1,2,3,4,5], [5], X). X = [1, 2, 3, 4]. |
1 2 |
?- subtract([1,2,3,4,5], [5,1], X). X = [2, 3, 4]. |
1 2 |
?- subtract([1,2,3,4,5], [4,2], X). X = [1, 3, 5]. |