Colecciones
El lenguaje cuenta con las colecciones lista y diccionario.
Lista¶
La lista encapsula valores de cualquier tipo de forma secuencial. Para esto se usa el identificador list. Por ejemplo,
1 | (list 1 2 3) ; lista de tres elementos: 1, 2 y 3. |
Debido a que el Botlang es funcional, no cuenta con estructuras de control de tipo while o for. Por esto la iteración suele hacerse a través de listas, mediante primitivas para manipulación de las mismas, como map, filter, reduce, entre otras.
Operaciones¶
Operador | Código de ejemplo | Resultado |
---|---|---|
get | (get (list 4 5 6) 2) | 5 |
get-or-nil | (get-or-nil (list 4 5 6) 4) | nil |
extend | (extend (list 1 2) (list 3 4)) | [1, 2, 3, 4] |
head | (head (list 1 2 3)) | 1 |
tail | (tail (list 1 2 3)) | [2, 3] |
init | (init (list 1 2 3)) | [1, 2] |
last | (last (list 1 2 3)) | 3 |
length | (length (list 1 2 3)) | 3 |
map | (map f (list 1 2 3)) | [f(1), f(2), f(3)] |
filter | (filter (function (v) (> v 3)) (list 5 2 8 9 -5 4) | [5, 8, 9, 4] |
sort | (sort (list 2 3 1)) | [1,2,3] |
max | (max (list 2 3 1)) | 3 |
min | (min (list 2 3 1)) | 1 |
find | (find (list 2 3 1) 2) | 1 |
reverse | (reverse (list 1 2 3 4)) | [4, 3, 2, 1] |
enumerate | (enumerate "abcd") | [(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')] |
sum | (sum (list 1 2 3 4 10)) | 20 |
Diccionario¶
Los diccionarios almacenan asociaciones llave->valor.
Sintaxis:
1 2 3 4 | (make-dict (list (cons "k1" "v1") (cons "k2" "v2") )) ; diccionario {"k1": "v1", "k2": "v2"} |
En Botlang los diccionarios son ordenados, por lo que el orden de las llaves dado en su definición se mantiene.
1 2 3 4 5 6 7 | (define d (make-dict (list (cons "k1" "v1") (cons "k2" "v2") ))) (keys d) ; ["k1", "k2"] (values d) ; ["v1", "v2"] |
Estas estructuras admiten modificación de sus valores, lo cual constituye un mecanismo de mutación en Botlang, por lo cual el lenguaje no es puramente funcional.
Por ejemplo,
1 2 3 4 5 6 7 8 9 10 11 12 13 | (define d (make-dict (list (cons "k" 1) ))) d ; {"k": 1} (put! d "k2" 2) d ; {"k": 1, "k2": 2} (put! d "k" 3) d ; {"k": 3, "k2": 2} (remove! d "k2") d ; {"k": 1} |
Operaciones¶
Operador | Código de ejemplo | Resultado |
---|---|---|
get | (get dict key default) | Valor asociado a key. Opcional: entrega default si no encuentra la llave. |
put | (put dict key value) | Entrega un nuevo diccionario resultante de añadir value a key en dict. |
put! | (put! dict key value) | Asocia value a key en el diccionario dict |
remove! | (remove! dict key) | Elimina la key del diccionario dict |
keys | (keys dict) | Lista de llaves de dict |
values | (values dict) | Lista de valores de dict |
associations | (associations dict) | Lista de pares llave-valor de dict |