0%
Pular para o conteúdo principal
0%

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

Reporte um bug →

❓ 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

Inicie uma discussão →

💡 Tem uma sugestão de melhoria?

Se você quer sugerir:

  • Melhoria na explicação
  • Exemplo adicional
  • Recurso visual (diagrama, ilustração)
  • Qualquer outra ideia

Sugira uma melhoria →

🌍 Quer discutir a tradução?

Se você quer debater:

  • Escolha de tradução de algum termo
  • Consistência de terminologia
  • Nuances do português

Discussão de tradução →

Obrigado por ajudar a melhorar o SICP.js PT-BR! ✨