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`

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, 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 no 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 forma eficaz aumentará a capacidade de escrever código Scheme limpo e expressivo.