Concepto de lista
Una lista es una estructura de datos que nos permite almacenar varios elementos de información como un único objeto.
El concepto de lista en Netlogo es equivalente al concepto de vector o array en otros lenguajes de programación.
En Netlogo, las listas se representan con dos corchetes entre los cuales se introducen los elementos que componen dicha lista. Ejemplos de lista son [3 6 83 4 2] [“a” “f” “h” “o”] [3 1 “hola” 4 1]. Un factor a tener en cuenta es que Netlogo comienza a numerar las listas a partir del elemento 0. Es decir, que, por ejemplo, para la lista [12 4 5], 12 sería el elemento 0; 4 el elemento 1 y 5 el elemento 2.
¿Cómo construir una lista?
Depende de si los datos que componen la lista son conocidos a priori o no.
- Si los datos son conocidos:
Para crear una lista, simplemente escribiremos entre corchetes los datos individuales que queremos que formen parte de la lista. Por ejemplo, para crear un lista llamada “a” con los elementos 1 2 3 4 5 6 7 simplemente escribiremos:
let a [ 1 2 3 4 5 6 7]
- Si los datos que forman la lista no son conocidos:
Si los datos que van a formar parte de la lista no son conocidos a priori, sino que son variables del programa (caso más habitual), deberemos emplear la primitiva list: list recibirá una serie de argumentos y nos devolverá una lista con los estos argumentos en el mismo orden en que se los hemos pasado.
La sintaxis de list depende del número de argumentos que recibe:
- Si recibe 2 argumentos, simplemente escribiremos los argumentos entre corchetes:
list [a b] ;; nota: a y b son números o variables
-Si recibe 3 o más argumentos, escribiremos list seguido de los argumentos que compondrán la lista, sin corchetes y con paréntesis englobando toda la sentencia (inluida la primitiva list):
(list a b c d e f g h i j k) ;; nota: a, b, c, d, e, f, g, h, i, j, k son números o variables
¿Cómo acceder a los elementos de una lista?
Para acceder al primer elemento de una lista usamos la primitiva first. Ejemplo:
first [a b c d e f g h i j k] --> a ;; nota: a, b, …, k son números o variables.
Para obtener el último elemento de la lista utilizamos el primitiva last:
last [a b c d e f g h i j k] --> k ;; nota: a, b, …, k son números o variables.
Para obtener todos los elementos de la lista excepto el primero se emplea la primitiva but-first. Ejemplo:
but-first [a b c d e f g h i j k] --> [b c d e f g h i j k] ;; nota: a, b, …, k son números o variables.
Para obtener todos los elementos de la lista excepto el último se emplea la primitiva but-last:
but-last [a b c d e f g h i j k] --> [a b c d e f g h i j] ;; nota: a, b, …, k son números o variables.
Para obtener el elemento n de la lista, empleamos la primitiva item. Ejemplo:
item 5 [a b c d e f g h i j k] --> f ;; nota: a, b, …, k son números o variables.
Nota: Recuerda que Netlogo numera las listas a partir del elemento 0.
Para tomar un elemento al azar de una lista se emplea la primitiva one-of:
one-of [a b c d e f g h i j k ] --> cualquier elemento de la lista tomado al azar
Y para tomar varios elementos al azar de una lista empleamos n-of:
n-of 3 [a b c d e f g h i j k ] --> nos devuelve otra lista con 3 elementos de la lista inicial tomados al azar.
¿Cómo modificar una lista?
Para introducir un nuevo elemento al comienzo de una lista, empleamos la primitiva fput:
fput z [a b c d e f g h i j k ] --> [z a b c d e f g h i j k ] ;; nota: a, b, …, k son números o variables.
Y para introducirlo al final de la lista, utilizamos la primitiva lput:
lput z [a b c d e f g h i j k ] --> [a b c d e f g h i j k z] ;; nota: a, b, …, k son números o variables.
Para eliminar un elemento de una lista, usamos la primitiva remove:
remove d [a b c d e f g h i j k ] --> [a b c e f g h i j k ] ;; nota: a, b, …, k son números o variables.
Nota: remove elimina todas las paraciciones del elemento en la lista.
Si conocemos la posición que ocupa un elemento dentro de una lista, podemos eliminarlo con la primitiva remove-item:
remove-item 4 [a b c d e f g h i j k ] --> [a b c d f g h i j k] ;; nota: a, b, …, k son números o variables.
Nota: Recuerda que Netlogo numera las listas a partir del elemento 0.
Una variación de la primitiva remove es la primitiva remove-duplicates, que elimina todos los elementos repetidos en la lista, dejando únicamente la primera aparición de los mismos. Ejemplo:
remove-duplicates [a a b b b c c d e e e e e f f g g h h i i j j j k k ] --> [a b c d e f g h i j k]
Para reemplazar un elemento de la lista por otro, empleamos la primitiva replace-item:
replace-item 4 [a b c d e f g h i j k ] z --> [a b c d z f g h i j k] ;; nota: a, b, …, k son números o variables.
Otras primitivas últiles relacionadas con listas:
Para conocer la longitud de una lista (esto es, su número de elementos) empleamos la primitiva length:
length [a b c d e f g h i j k ] --> 11 ;; nota: a, b, …, k son números o variables.
Para obtener el elemento que más se repite dentro de una lista (es decir, la moda), se emplea la primitiva modes:
modes [a a b c d e f g h i j k] --> a ;; nota: a, b, …, k son números o variables.
Para conocer la posición de un elemento dentro de una lista se utiliza la primitiva position:
position a [a b c d e f g h i j k ] --> 0 ;; nota: a, b, …, k son números o variables.
Para desordenar aleatoriamente los elementos de una lista utilizamos la primitiva shuffle:
shuffle [a b c d e f g h i j k ] --> [d k a c e i j h f b g] ;; nota: a, b, …, k son números o variables.
Para obtener una lista ordenada de manera inversa a la original, empleamos la primitiva reverse:
reverse [a b c d e f g h i j k ] --> [k j i h g f e d c b a] ;; nota: a, b, …, k son números o variables.
Para obtener una lista con los elementos ordenados en orden creciente, empleamos la primitiva sort:
sort [4 6 2 8 4] --> [2 4 4 6 8]
Nota 1: Recuerda siempre que, para Netlogo, el primer elemento de una lista es el elemento 0.
Nota 2: Recuerda que si los elementos de una lista son caracteres, éstos deben escribirse entre comillas: [“a” “b” “c” “d” “e” “f” “g” “h” “i” “j” “k”]