Liza
En Scheme, una lista es una estructura de datos fundamental que se utiliza para agrupar valores. Las listas son colecciones ordenadas de elementos donde cada elemento puede ser de cualquier tipo, incluida otra lista. Las listas se utilizan ampliamente en Scheme tanto para el almacenamiento de datos como para la estructura del programa.
Ejemplo 1: Lista simple
(list 1 2 3)- Crea una lista de tres elementos:
1,2y3.
Resultado: (1 2 3)
Acceso a elementos de la lista
Se accede a los elementos de una lista mediante los procedimientos car y cdr:
carrecupera el primer elemento de una lista.cdrrecupera el resto de la lista (todo excepto el primer elemento).
Ejemplos
(define my-list (list 1 2 3))
(car my-list) ; Retrieves the first element
(cdr my-list) ; Retrieves the rest of the listResultado:
(car my-list)devuelve1(cdr my-list)devuelve(2 3)
Recursión simple: iteración a través de una lista
Al llamar recursivamente a car en el cdr de una lista, puede procesar cada elemento uno por uno hasta recorrer la lista. Esto forma la base de muchos algoritmos de procesamiento de listas.
Ejemplo: imprimir cada elemento de una lista
Aquí hay una función recursiva simple para imprimir cada elemento en una lista:
(define (print-elements lst)
(if (null? lst)
(lumi-message "done")
(begin
(lumi-message (number->string (car lst))) ;; Print the first element
(print-elements (cdr lst))))) ;; Process the rest of the list- Caso base: Si la lista está vacía (
null? lst), detenga la recursividad. - Caso recursivo: Imprime el primer elemento (
car lst), luego llama a la función en el resto de la lista (cdr lst).
Ejemplo de uso
(print-elements (list 1 2 3))Salida:
"1""2""3"
Resultado: “hecho”
Cómo funciona
- La función recupera el primer elemento de la lista usando
cary lo procesa. - Luego se llama a sí mismo con el resto de la lista (
cdr). - Este proceso se repite hasta que la lista esté vacía (
null? lst).
Ejemplo 2: tipos mixtos
Las listas pueden incluir elementos de diferentes tipos, incluidas cadenas, booleanos, números, otras listas o incluso el resultado de expresiones:
(list 42 "hello" #t (list 1 2) (+ 3 4))- Esto crea una lista con:
- Un número (
42) - Una cadena (
"hello") - Un booleano (
#t) - Otra lista (
(1 2)) - El resultado de una expresión (
(+ 3 4), que se evalúa como7)
- Un número (
Resultado: (42 "hello" #t (1 2) 7)
Estos ejemplos demuestran la versatilidad de las listas en Scheme, lo que las convierte en una poderosa herramienta para organizar y manipular datos.
Construyendo listas
El procedimiento cons se utiliza para construir una nueva lista combinando un elemento con una lista existente.
(cons new-element existing-list)Ejemplo
(cons 0 (list 1 2 3))- Agrega
0al principio de la lista(1 2 3).
Resultado: (0 1 2 3)
Comprobando listas
El procedimiento list? comprueba si un valor determinado es una lista.
(list? value)Ejemplo: ¿lista?
(list? (list 1 2 3)) ; Checks if (list 1 2 3) is a list
(list? 42) ; Checks if 42 is a listResultado:
(list? (list 1 2 3))devuelve#t(verdadero)(list? 42)devuelve#f(falso)
Operaciones en listas
Scheme proporciona varios procedimientos integrados para trabajar con listas, que incluyen:
length: Devuelve el número de elementos de una lista.append: Combina dos o más listas en una.reverse: Devuelve una nueva lista con elementos en orden inverso.
(length (list 1 2 3)) ; Returns 3
(append (list 1 2) (list 3 4)) ; Returns (1 2 3 4)
(reverse (list 1 2 3)) ; Returns (3 2 1)Resultado:
(length (list 1 2 3))devuelve3(append (list 1 2) (list 3 4))devuelve(1 2 3 4)(reverse (list 1 2 3))devuelve(3 2 1)#### Usandolist-ref
El procedimiento list-ref recupera el elemento en un índice específico de una lista (índice de base cero).
(list-ref lst index)lst: La lista de la cual recuperar el elemento.index: un índice de base cero que indica qué elemento devolver.
Ejemplo: lista-ref
(list-ref (list 10 20 30 40) 2) ; Retrieves the element at index 2Resultado: 30
Listas anidadas
Las listas en Scheme pueden contener otras listas como elementos, creando una estructura anidada.
Ejemplo: creación de una lista anidada
(define nested-list (list (list 1 2) (list 3 4) (list 5)))- Crea una lista de tres elementos, cada uno de los cuales es en sí mismo una lista.
Resultado: ((1 2) (3 4) (5))
Acceso a datos anidados
Para acceder a elementos dentro de una lista anidada, puede usar combinaciones de car y cdr para navegar a través de la estructura.
Ejemplo: acceso a elementos
(car nested-list) ; Retrieves the first element: (1 2)
(car (car nested-list)) ; Retrieves the first element of the first sublist: 1
(cdr (car nested-list)) ; Retrieves the rest of the first sublist: (2)
(car (cdr (car nested-list))) ; Retrieves the second element of the first sublist: 2Explicación
car nested-list:- Recupera el primer elemento de
nested-list, que es(1 2).
- Recupera el primer elemento de
car (car nested-list):- Recupera el primer elemento de
(1 2), que es1.
- Recupera el primer elemento de
cdr (car nested-list):- Recupera el resto de
(1 2), que es(2).
- Recupera el resto de
car (cdr (car nested-list)):- Recupera el primer elemento de
(2), que es2.
- Recupera el primer elemento de
Ejemplo: acceder a elementos de otras sublistas
(car (cdr nested-list)) ; Retrieves the second sublist: (3 4)
(car (car (cdr nested-list))) ; Retrieves the first element of the second sublist: 3Este enfoque le permite navegar y acceder sistemáticamente a elementos específicos en una lista anidada, lo que proporciona una gran flexibilidad para trabajar con datos jerárquicos.
Resumen
- Las Listas en Scheme son estructuras de datos versátiles y esenciales.
- Utilice
listpara crear una lista,carycdrpara acceder a elementos yconspara construir listas. - Los procedimientos integrados como
length,append,reverseylist-refhacen que las operaciones de listas sean fáciles y eficientes. - Las listas se pueden anidar, lo que permite estructuras de datos complejas para casos de uso avanzados.