outras funcoes, armazenar funcoes como atributos ou elementos de uma estrutura de dados ou lista e tambem retorna-las como resultado de uma expressao, o que permite a criacao de abstracoes mais poderosas. Um exemplo dessa capacidade e o uso da funcao interna map que mapeia os elementos de um conjunto aos elementos de um novo conjunto utilizando uma funcao que e passada como parametro e que sera aplicada a cada elemento do conjunto inicial para gerar o novo conjunto. Exemplos: ML map(sqrt [1, 2, 3, 4]) Scheme (MAP SQRT '(1 2 3 4)) Python map(math.sqrt, [1,2,3,4]) Em todos os exemplos acima o resultado sera uma nova lista contendo a raiz quadrada dos elementos da lista passada como paramentro. 6. Verificacao de Tipos Tradicionalmente na Engenharia de Software o sistema de verificacao de tipos de uma linguagem de programacao e classificado em dois grupos principais: estaticamente (fortemente) tipadas ou dinamicamente (fracamente) tipadas. A capacidade de verificacao de tipos de uma linguagem afeta diretamente a sua confiabilidade.Porem algumas linguagens, como Python, nao se enquadram nesse modelo, pois sao dinamicamente tipadas e ao mesmo tempo fortemente tipadas. Surgindo entao uma diferenciacao da definicao tradicional onde podemos definir as linguagens como estaticamente ou dinamicamente tipadas e fortemente ou fracamente tipadas. As linguagens estaticamente tipadas sao aquelas no qual toda a variavel, funcao e paramentros tem um tipo bem definido, declarado pelo programador, e ela realiza a verficacao de tipos em tempo de compilacao. Ja nas linguagens dinamicamente tipadas, somente os valores tem tipos de dados definidos (tipos latentes), ou seja, uma variavel ou parametro nao tem um tipo definido e pode conter valores de diferentes tipos em diferentes momentos. Isso implica que a verificacao de tipos deve ser realizada em tempo de execucao. ML e uma linguagem estaticamente tipada e que possui um sistema de inferencia de tipos robusto, tornando opcional a declaracao de tipos. Scheme e Python sao dinamicamente tipadas e tambem possuem a inferencia dos tipos. Porem em todas elas o sistema de verficacao de tipos nao realiza a conversao implicita de um tipo de dados para outro, leventando uma excecao quando tipos inconsistentes sao utilizados. Python realiza uma nova vinculacao de nome e espaco a cada attribuicao de valor a uma variavel, inferindo o tipo de dados do valor recebido. Alem disso ela nao possui definicao de tipos nos parametros de funcoes ou metodos, deixando a cargo no programador o tratamento dos tipos recebidos e retornados. Exemplos: Scheme (+ 10 16) ;The object 16, passed as the second argument to integer-add, is not the correct type. Python 10 + 16 TypeError: unsupported operand type(s) for +: 'int' and 'str' ML 10 + 16; ! Type clash: expression of type string cannot have type int Podemos observar que nao ha a sobrecarga do operador + para concaternar uma string com um inteiro e a excecao levantada e resultado do sistema de verificacao de tipos. 7. Manipulacao de excecoes Durante o desenvolvimento de um programa, diferentes tipos de erros precisam ser previstos e tratados para que se alcance um grau de confiabiliade adequado a cada