2.2.3 Sequências como Interfaces Convencionais
Na programação com estruturas de dados abstratas, o foco está em "fluxo de sinais" através do programa. Podemos encorajar designs modulares fornecendo uma biblioteca de componentes padrão junto com uma interface convencional para conectá-los de maneiras flexíveis.
Operações de Sequência
Sequências, implementadas como listas, servem como uma interface convencional que nos permite combinar módulos de processamento. Começamos com quatro operações fundamentais:
Filter (Filtrar)
Seleciona elementos que satisfazem um predicado:
Carregando playground de código...
Accumulate (Acumular)
Combina elementos usando uma operação:
Carregando playground de código...
Enumerate (Enumerar)
Gera sequências de valores:
Carregando playground de código...
Map (Mapear)
Transforma cada elemento:
Carregando playground de código...
Composição de Operações
O verdadeiro poder vem de combinar essas operações. Por exemplo, encontrar a soma dos quadrados dos números ímpares em uma árvore:
Carregando playground de código...
Sequências Aninhadas
Podemos estender o paradigma de sequência para incluir muitas computações que são comumente expressas usando loops aninhados. Considere o problema de gerar todos os pares ordenados de inteiros positivos distintos i e j, onde 1 ≤ j < i ≤ n:
Carregando playground de código...
Exercícios
Exercício 2.33: Preencha as definições faltantes de map, append e length em termos de accumulate.
Exercício 2.34: Complete a função que avalia um polinômio usando a regra de Horner.
Exercício 2.35: Redefina count_leaves como um acúmulo.
Exercício 2.36: Defina accumulate_n que recebe uma sequência de sequências e aplica acumulação elemento por elemento.
Exercício 2.37-2.38: Implemente operações de matriz (multiplicação, transposição) usando operações de sequência.
Exercício 2.39: Complete duas definições de reverse usando fold_right e fold_left.
Exercício 2.40-2.43: Simplifique o problema de encontrar pares primos e resolva o problema das oito rainhas usando operações de sequência aninhadas.
📝 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! ✨