2.3.1 Strings como Objetos de Dados
Em JavaScript, strings (delimitadas por aspas duplas " ou aspas simples ') permitem que programadores tratem texto como dados literais ao invés de código a ser avaliado. Por exemplo, "z" denota uma string de caractere, enquanto z sem aspas refere-se ao valor de uma variável.
Podemos formar listas compostas de strings e números:
A Função member
Para implementar a manipulação de dados simbólicos, precisamos de uma função member que verifica se um item está presente em uma lista:
A função member retorna a sublista começando com a primeira ocorrência do item, ou null se o item não está na lista.
Exercício 2.53
O que seria impresso pelo interpretador em resposta à avaliação de cada uma das seguintes expressões?
💡 Mostrar solução — tente primeiro!💡 Esconder solução
Na notação de caixas desta edição (execute o bloco acima e confira):
| Expressão | Valor |
|---|---|
list("a", "b", "c") | ["a", ["b", ["c", null]]] |
list(list("george")) | [["george", null], null] |
tail(list(list("x1","x2"), list("y1","y2"))) | [["y1", ["y2", null]], null] |
tail(head(list(list("x1","x2"), list("y1","y2")))) | ["x2", null] |
member("red", list(list("red","shoes"), list("blue","socks"))) | null |
member("red", list("red","shoes","blue","socks")) | ["red", ["shoes", ["blue", ["socks", null]]]] |
O quinto caso pega muita gente: as cabeças daquela lista são listas (list("red","shoes") etc.), nunca a string "red" — o member compara com === e não entra dentro delas.
Exercício 2.54
Duas listas são consideradas equal se contêm elementos iguais organizados na mesma ordem. Implemente equal como uma função.
💡 Mostrar solução — tente primeiro!💡 Esconder solução
Ideia. Igualdade estrutural: ou os dois são pares com cabeças iguais e caudas iguais, ou são primitivos idênticos.
O caso base cobre strings, números e o null do fim das listas de uma vez — === faz o trabalho quando não há mais estrutura para descer.
Exercício 2.55
Explique o que acontece quando você avalia uma string com a função display e por que isso difere da avaliação normal.
💡 Mostrar solução — tente primeiro!💡 Esconder solução
Avaliar uma string sozinha — "abracadabra"; — faz o interpretador ecoar o valor na sua representação de programa: entre aspas, "abracadabra". Já display("abracadabra") imprime o conteúdo da string, sem aspas, e devolve a string (que o REPL então ecoa com aspas).
A diferença é entre o valor e a notação que o denota: o eco do interpretador responde "que expressão produziria este valor" (por isso as aspas, como stringify faz); display responde "que texto este valor contém". Para números a distinção é invisível — para strings, as aspas são exatamente a fronteira entre dados e código.
📝 Encontrou algo errado nesta página?
Sua ajuda é muito importante para melhorar a qualidade da tradução!
🐛 Encontrou um erro?
Se você encontrou:
- Erro de tradução (palavra incorreta, termo técnico errado)
- Erro de ortografia ou gramática
- Link quebrado
- Código de exemplo que não funciona
- Problema de formatação
❓ Tem uma dúvida?
Se você tem:
- Dúvida sobre o conteúdo desta seção
- Pergunta sobre um conceito do SICP
- Dificuldade em entender algum exemplo
- Questão sobre a tradução de algum termo
💡 Tem uma sugestão de melhoria?
Se você quer sugerir:
- Melhoria na explicação
- Exemplo adicional
- Recurso visual (diagrama, ilustração)
- Qualquer outra ideia
🌍 Quer discutir a tradução?
Se você quer debater:
- Escolha de tradução de algum termo
- Consistência de terminologia
- Nuances do português
Obrigado por ajudar a melhorar o SICP.js PT-BR! ✨