Símbolos

Os símbolos são um dos principais tipos de dados em Scheme, representando identificadores únicos e imutáveis. Eles são usados principalmente como chaves, marcadores ou espaços reservados em programas, tornando-os essenciais para escrever código limpo e expressivo.

Um símbolo em Scheme é semelhante a uma string, mas difere porque os símbolos são únicos e atômicos. Isso significa que dois símbolos com o mesmo nome têm a garantia de ser o mesmo objeto, permitindo verificações rápidas de igualdade e uso eficiente em estruturas de dados.

Sintaxe

Um símbolo é escrito como uma sequência de caracteres:

  • Começa com uma letra, seguida por letras, dígitos ou caracteres especiais como -, + ou *.
  • Os símbolos diferenciam maiúsculas de minúsculas por padrão.

Exemplos:

'hello       ; Um símbolo chamado `hello`
'foo-bar     ; Um símbolo chamado `foo-bar`
'*special*   ; Um símbolo chamado `*special*`

Criando Símbolos

Os símbolos são normalmente criados usando o operador quote ('), que diz aScheme para tratar o nome como um símbolo em vez de avaliá-lo como uma variável ou função.

Exemplo

'my-symbol   ; Cria o símbolo `my-symbol`

Você também pode criar símbolos programaticamente usando o procedimento string->symbol, que converte uma string em um símbolo.

(string->symbol "dynamic-symbol")

Resultado: 'dynamic-symbol

Comparando Símbolos

Como os símbolos são únicos, você pode compará-los de forma eficiente usando eq?.

Exemplo

(eq? 'apple 'apple)   ; #t (mesmo símbolo)
(eq? 'apple 'orange)  ; #f (símbolos diferentes)

Isso torna os símbolos ideais para uso como chaves em estruturas de dados ou marcadores em seu código.

Usando símbolos

Os símbolos são frequentemente usados em Scheme para:

  1. Chaves nas listas de associações:
(define alist '((name . "Alice") (age . 30) (city . "Paris")))
(assoc 'name alist)   ; Retorna (name . "Alice")
  1. Identificadores no código:
   (define my-symbol 'foo)
   (if (eq? my-symbol 'foo)
       "It's foo!"
       "It's something else.")

Procedimentos para trabalhar com símbolos

Scheme fornece procedimentos integrados para trabalhar com símbolos:

ProcedimentoDescrição
symbol?Verifica se um objeto é um símbolo.
eq?Compara dois símbolos de identidade (comparação rápida).
symbol->stringConverte um símbolo em uma string (útil para exibição ou depuração).
string->symbolConverte uma string em um símbolo (útil para criação dinâmica de identificadores).

Exemplos

(symbol? 'example)            ; #t (verdadeiro: é um símbolo)
(symbol->string 'example)     ; Resultado: "example"
(string->symbol "new-symbol") ; Resultado: 'new-symbol

Resumo

Os símbolos são uma forma leve e eficiente de representar identificadores, chaves e marcadores em Scheme. Sua imutabilidade e rápidas verificações de identidade os tornam ideais para muitas tarefas de programação. Compreender como usar símbolos de maneira eficaz aumentará sua capacidade de escrever código Scheme limpo e expressivo.