O livro está muito bem redigido, é de leitura agradável, tem um bom ritmo de introdução das matérias e uma boa cobertura de conceitos. Há a preocupação de apresentar os assuntos com precisão mas sem excessivo formalismo. (...) É um texto de qualidade para o ensino da programação com base no paradigma funcional, que pode também ser útil a um programador que desconheça este paradigma ou a linguagem Scheme.
Luís Monteiro
Professor Catedrático da Faculdade de Ciências e Tecnologia
Universidade Nova de Lisboa
PREFÁCIO xv
1 NOÇÕES BÁSICAS 1
1.1 Algoritmos 5
1.2 O Desenvolvimento de Programas 8
1.3 Programas em Scheme 11
1.3.1 Sintaxe e semântica 13
1.3.2 Construção de formas 15
1.4 Expressões 16
1.4.1 Constantes 16
1.4.2 Combinações 18
1.5 Avaliação de Expressões - Primeira Abordagem 23
1.6 Nomes 31
1.7 Formas Especiais 34
1.8 Resumo 35
1.8.1 Conceitos apresentados 36
1.8.2 Primitivas apresentadas 37
1.9 Exercícios 37
2 PROCEDIMENTOS COMPOSTOS 39
2.1 A Definição e Utilização de Procedimentos 41
2.1.1 Definição de procedimentos em Scheme 43
2.1.2 Aplicação de procedimentos em Scheme 44
2.1.3 Nomeação de procedimentos 45
2.1.4 Procedimentos e abstracção 46
2.2 Avaliação de Expressões - Segunda Abordagem 48
2.3 Expressões Condicionais 50
2.4 Exemplos 55
2.4.1 Cálculo de potências 55
2.4.2 Cálculo do máximo divisor comum 57
2.4.3 Cálculo do arco de tangente 60
2.5 Nomes Locais 64
2.6 Estrutura de Blocos 70
2.6.1 Nomes globais, livres e locais 77
2.7 Resumo 80
2.7.1 Conceitos apresentados 80
2.7.2 Primitivas apresentadas 80
2.8 Exercícios 81
3 PROCESSOS GERADOS POR PROCEDIMENTOS 87
3.1 Recursão Linear 89
3.1.1 Cálculo de potências 90
3.1.2 Cálculo de factoriais 91
3.1.3 Cálculo da divisão inteira 92
3.1.4 Caracterização de um processo recursivo linear 93
3.2 Iteração Linear 94
3.2.1 Cálculo de potências 94
3.2.2 Cálculo de factoriais 96
3.2.3 Cálculo da divisão inteira 97
3.2.4 Caracterização de um processo iterativo linear 98
3.3 Recursão em Processos e em Procedimentos 99
3.4 Recursão em Árvore 99
3.4.1 Os números de Fibonacci 99
3.4.2 A Torre de Hanói 105
3.5 Sequenciação 109
3.6 Ordens de Crescimento 110
3.6.1 Potência rápida 114
3.7 Resumo 115
3.7.1 Conceitos apresentados 115
3.7.2 Primitivas apresentadas 115
3.8 Exercícios 1154 PROCEDIMENTOS DE ORDEM SUPERIOR 119
4.1 Procedimentos Como Parâmetros 122
4.1.1 Procedimentos como métodos gerais 127
4.2 Procedimentos Produzidos Por Procedimentos 130
4.2.1 Cálculo de derivadas 130
4.2.2 Raízes pelo método de Newton 132
4.3 Resumo 134
4.3.1 Conceitos apresentados 135
4.4 Exercícios 136
5 ABSTRACÇÃO DE DADOS 139
5.1 Aritmética dos Números Complexos 143
5.1.1 Complexos como procedimentos 146
5.1.2 Essência da abstracção de dados 148
5.1.3 O tipo par 149
5.1.4 Complexos como pares 154
5.2 Tipos Abstractos de Informação 155
5.2.1 Identificação das operações básicas 156
5.2.2 Axiomatização 158
5.2.3 Escolha da representação 158
5.2.4 Realização das operações básicas 158
5.2.5 Barreiras de abstracção 161
5.3 A Lista Como Tipo Abstracto 164
5.3.1 Listas simplificadas 165
5.3.2 Exemplos de utilização de listas 171
5.3.3 Listas completas 174
5.4 Funcionais Sobre Listas 179
5.5 A Árvore Como Tipo Abstracto 181
5.5.1 Operações básicas para árvores 183
5.5.2 Axiomatização 185
5.5.3 Representação de árvores 186
5.5.4 Realização das operações básicas sobre árvores 186
5.6 Ordenação Por árvore 189
5.7 Número Arbitrário de Argumentos 193
5.8 O Tipo Símbolo 195
5.9 Resumo 198
5.9.1 Conceitos apresentados 198
5.9.2 Primitivas apresentadas 199
5.10 Exercícios 199
6 O DESENVOLVIMENTO DE PROGRAMAS 209
6.1 A Análise do Problema 213
6.2 O Desenvolvimento da Solução 214
6.3 A Programação da Solução 216
6.3.1 A depuração 217
6.3.2 A finalização da documentação 219
6.4 A Fase de Testes 221
6.5 A Manutenção 223
6.6 Sumário 224
6.6.1 Conceitos apresentados 225
6.7 Exercícios 225
7 PROGRAMAÇÃO IMPERATIVA 227
7.1 Operador de Atribuição 230
7.2 O Tipo Caixa 233
7.3 Caixas Face a Variáveis 236
7.4 Métodos de Passagem de Parâmetros 236
7.4.1 Passagem por valor 237
7.4.2 Passagem por referência 237
7.5 Ordem de Execução de Instruções 239
7.6 Procedimentos Com Estado Interno 240
7.7 O Tipo Vector 242
7.8 Aplicações de Vectores 244
7.8.1 Procura 244
7.8.2 Ordenação 246
7.9 Resumo 250
7.9.1 Conceitos apresentados 251
7.9.2 Primitivas apresentadas 252
7.10 Exercícios 2528 AVALIAÇÃO BASEADA EM AMBIENTES 257
8.1 A Noção de Ambiente 259
8.2 Criação de Procedimentos 263
8.3 Aplicação de Procedimentos 264
8.3.1 Avaliação de procedimentos simples 265
8.3.2 Avaliação com variáveis locais 270
8.3.3 Avaliação com definições internas 274
8.4 Mecanismo de Avaliação 280
8.5 Resumo 282
8.5.1 Conceitos apresentados 282
8.6 Exercícios 283
9 ESTRUTURAS MUTÁVEIS 285
9.1 Filas 287
9.1.1 Operações básicas para filas 287
9.1.2 Axiomatização 290
9.1.3 Representação de filas como listas 290
9.1.4 Realização das operações básicas 291
9.1.5 Problemas com a representação escolhida 293
9.1.6 Modificadores para pares 294
9.1.7 Filas com indicação do início e do fim 295
9.2 Pilhas 301
9.2.1 Operações básicas para pilhas 301
9.2.2 Axiomatização 304
9.2.3 Representação de pilhas 304
9.2.4 Realização das operaçoes básicas sobre pilhas 305
9.2.5 Utilização de pilhas 307
9.3 Ponteiros 310
9.4 Gestão de Memória 314
9.5 Resumo 315
9.5.1 Conceitos apresentados 316
9.5.2 Primitivas apresentadas 316
9.6 Exercícios 316
10 PROGRAMAÇÃO COM OBJECTOS 321
10.1 O Conceito de Objecto 329
10.2 Classes e Instãncias 330
10.2.1 Identidade e igualdade 331
10.3 Classes, Subclasses e Herança 333
10.4 Herança Múltipla 339
10.5 Pilhas Como Objectos 342
10.6 Resumo 345
10.6.1 Conceitos apresentados 345
10.6.2 Primitivas apresentadas 345
10.7 Exercícios 346
11 EPÍLOGO 349
11.1 Programas 352
11.1.1 Algoritmos 352
11.1.2 Linguagens 354
11.1.3 Construção de abstracções 357
11.2 Programação 360
11.2.1 Arquitectura de programas 360
11.2.2 Paradigmas de programação 361
11.2.3 Técnicas usadas em programação 365
11.2.4 Sistemas operativos 369
11.3 Notas Finais 371
A MANUAL DE SOBREVIVÊNCIA EM SCHEME 373
A.1 Obtenção do Scheme 375
A.2 Janelas e Menus 376
A.2.1 Janela de interacção 378
A.2.2 Janela de definições 379
A.2.3 Ligação entre as janelas 380
A.3 Auxílio na Depuração 380
A.3.1 Detecção da origem de erros 380
A.3.2 Rastreio de procedimentos 382
A.3.3 Interrupção da execução 385
A.4 Avaliação Por Passos 385
A.5 Informação de Ajuda 387
B ESTUDO DE UM CASO 389
B.1 Análise do Problema 391
B.1.1 O conceito de polinómio 391
B.1.2 Polinómios reduzidos 392
B.1.3 Operações a realizar 393
B.1.4 Planeamento do projecto 394
B.2 Desenvolvimento da Solução 395
B.2.1 Tipos abstractos de informação 395
B.2.2 Algoritmos 402
B.3 Programação da Solução 411
B.3.1 Representação interna dos tipos 411
B.3.2 Programa 412
B.4 Manual do Utilizador 441
B.4.1 Carregamento 441
B.4.2 Comandos disponíveis 442
B.4.3 Exemplo de interacção 443
B.4.4 Limitações 443
B.5 Testes 444
B.5.1 Testes de módulos 444
B.5.2 Testes para operações 447
C SOLUÇOES DE EXERCÍCIOS SELECCIONADOS 451
C.1 Exercícios do Capítulo 1 453
C.2 Exercícios do Capítulo 2 453
C.3 Exercícios do Capítulo 3 455
C.4 Exercícios do Capítulo 4 457
C.5 Exercícios do Capítulo 5 459
C.6 Exercícios do Capítulo 7 464
C.7 Exercícios do Capítulo 9 479
D EXEMPLOS DE PROJECTOS 487
D.1 Manipulação de Figuras Geométricas 489
D.1.1 Principais objectivos 489
D.1.2 Tipos a implementar 489
D.1.3 Duas representações para as figuras 496
D.1.4 Organização do código do projecto 497
D.1.5 Relatório 497
D.1.6 Trabalho a desenvolver 498
D.1.7 Código disponibilizado 499
D.2 Robot Explorador 502
D.2.1 Descrição do problema 502
D.2.2 Características do ambiente 502
D.2.3 Capacidades do robot 504
D.2.4 Tipos a implementar 505
D.2.5 Campeonato de robots 509
D.2.6 Relatório 510
D.2.7 Trabalho a desenvolver 510
D.3 Bases de Dados Dedutivas 510
D.3.1 Projecto 512
D.3.2 Passos a seguir 514
D.3.3 Interrogações com variáveis 515
D.3.4 Dados para teste do programa 520
REFERÊNCIAS BIBLIOGRÁFICAS 519
ÍNDICE REMISSIVO 527
João Pavão Martins obteve o doutoramento em Inteligência Artificial pela “State University of New York at Buffalo” em 1983 e a agregação em Engenharia Informática pela Universidade Técnica de Lisboa em 1991. É Professor Catedrático no Instituto Superior Técnico. Foi um dos proponentes da Licenciatura em Engenharia Informática e de Computadores (LEIC) do IST, tendo sido o seu coordenador durante cinco anos. Tem leccionado cadeiras de introdução à programação desde 1980, preocupando-se com o ensino de programação disciplinada. É autor de dois livros de introdução à programação, um deles publicado nos Estados Unidos. É investigador no Grupo de Inteligência Artificial do IST, inserido no IDMEC, desenvolvendo a sua investigação nas áreas de Representação do Conhecimento e Revisão de Crenças. Foi compilador de dois livros e autor de múltiplos artigos científicos.
Maria dos Remédios Cravo obteve o doutoramento em Engenharia Electrotécnica e de Computadores, área de Inteligência Artificial, pelo Instituto Superior Técnico, em 1992. Actualmente é Professora Auxiliar no Departamento de Engenharia Informática do IST, onde lecciona, para além da disciplina de Fundamentos de Programação, várias disciplinas da área de Inteligência Artificial. É investigadora do Grupo de Inteligência Artificial do IST, inserido no IDMEC, desenvolvendo a sua investigação nas áreas de Raciocínio e Revisão de Crenças, tendo nos últimos tempos estudado a influência das emoções nestes processos. Tem publicado artigos científicos nestas áreas. Desde 1987 que se encontra envolvida no ensino de disciplinas de introdução à programação, dando ênfase aos seus conceitos fundamentais. É co-autora de um livro com exercícios resolvidos de programação publicado nos Estados Unidos.