Listas de Associação (Alistas)
Uma lista de associações (ou alist) é uma estrutura de dados fundamental no Scheme usada para representar coleções de pares chave-valor. É implementado como uma lista de pares, onde cada par associa uma chave (normalmente um símbolo) a um valor. As listas são simples, flexíveis e adequadas para conjuntos de dados de pequeno e médio porte.
Estrutura de uma lista de associações
Uma lista é uma lista onde cada elemento é um par (construído com cons). Cada par consiste em:
- Chave: O primeiro elemento (normalmente um símbolo).
- Valor: O segundo elemento, que pode ser de qualquer tipo de dados.
(define alist '((name . "Alice") (age . 30) (city . "Paris")))- Chave:
'name,'age,'city - Valor:
"Alice",30,"Paris" - Estrutura: uma lista de pares:
((name . "Alice") (age . 30) (city . "Paris"))
Criando uma lista
Você pode criar uma lista construindo pares manualmente ou programaticamente usando cons.
Usando aspas simples (')
A aspa simples (') é uma abreviação para quoting, o que impede que Scheme avalie a expressão. Isso o torna ideal para criar listas estáticas onde todas as chaves e valores são codificados.
;; Manually define an alist
(define alist '((name . "Alice") (age . 30) (city . "Paris")))
;; Programmatically add a new pair
(define updated-alist (cons '(country . "France") alist))Resultado:
((country . "France") (name . "Alice") (age . 30) (city . "Paris"))
Usando as crases (`) and Comma (,)
O operador de crase (`) is similar to the single quote but allows you to dynamically insert evaluated expressions using the comma (,). Isso é útil para criar listas onde chaves ou valores são calculados em tempo de execução.
(define key 'name)
(define value "Alice")
(define alist `((,key . ,value) (age . 30) (city . "Paris")))Resultado:
((name . "Alice") (age . 30) (city . "Paris"))
Exemplo de comparação
Lista estática usando ':
(define alist '((name . "Alice") (age . 30) (city . "Paris")))Lista dinâmica usando ` and ,:
(define key 'name)
(define value "Alice")
(define alist `((,key . ,value) (age . 30) (city . "Paris")))Acessando dados em uma lista
Para recuperar um valor de uma lista, você pode usar a função assoc, que procura um par por sua chave.
(assoc 'name alist) ; Returns (name . "Alice")
(assoc 'country alist) ; Returns #f (key not found)Extraindo o valor
Depois de recuperar um par usando assoc, use cdr para extrair o valor:
(cdr (assoc 'name alist)) ; Returns "Alice"Resumo dos principais recursos
- Aspas simples (
'): Cria uma lista estática onde todos os elementos são dados literais. - Backquote (
`): Allows dynamic creation of alists by mixing static elements with evaluated expressions (using,). - Notação de ponto (
.): Usada para construir pares, associando uma chave a um valor em uma lista.