A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 34 Departamento de Informática Centro.

Apresentações semelhantes


Apresentação em tema: "Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 34 Departamento de Informática Centro."— Transcrição da apresentação:

1 Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres boeres@inf.ufes.br CT VII - Sala 34 Departamento de Informática Centro Tecnológico Universidade Federal do Espírito Santo

2 Definição de funções usando listas (list comprehension) Uma lista pode ser descrita através da enumeração de seus elementos Podemos também descrever listas através das condições que um elemento deve satisfazer para pertencer a ela. Em outras palavras, queremos descrever uma lista através de uma intenção. Esta forma é análoga à que já conhecemos para descrição de conjuntos. Exemplo: P = {quadrado de x | x é natural e é menor que 10} ou ainda mais formalmente, P = { x^2 | x pertence a N e x <10}

3 Sintaxe [ | ]

4 Sintaxe : - expressões usuais em Haskell para definição de valores, inclusive condicionais. : - descrição dos elementos a serem considerados para avaliação da.

5 Sintaxe A pertinência é formada por uma seqüência de qualificadores de dois tipos de construção: os geradores e os predicativos. Os geradores descrevem uma lista de onde se originam os elementos a serem considerados, usando a sintaxe:

6 Exemplos Prelude> [x^2| x<-[0..4]] [0,1,4,9,16] Prelude>[x | x<-[1,4..100],odd x] [1,7,13,19,25,31,37,43,49,55,61,67,73,7 9,85,91,97]

7 Exemplos É importante destacar que as expressões de pertinência são avaliadas da esquerda para direita. Prelude> [x | odd x, x<-[1,4..100]] ERROR: Undefined variable "x"

8 Exemplos -- Dada uma lista 'xs' defina uma sublista formada -- pelo quadrado dos elementos que são pares slpares xs = [x^2 | x<- xs, even x] Main> :l preparalista.txt Reading file "preparalista.txt": Hugs session for: E:\HUGS98\lib\Prelude.hs preparalista.txt Main> slpares [1,4..50] [16,100,256,484,784,1156,1600,2116] Main> slpares [34,67,99,23,12,3,67,99] [1156,144]

9 Exemplos -- Determinar a sublista de elementos menores que 'x' em -- uma lista --'xs' lmenor x xs = [ y | y <-xs, y < x] --------------------------------------------- Main> lmenor 45 [1,5,6,86,34,76,12,34,86,99] [1,5,6,34,12,34] Main> lmenor 1 [1,5,6,86,34,76,12,34,86,99] [ ] Main> lmenor 100 [1,5,6,86,34,76,12,34,86,99] [1,5,6,86,34,76,12,34,86,99]

10 Exemplos -- Determinar a lista de elementos gerados -- condicionalmente a uma constante dada k. pmenoresk k xs = [ if x < k then x^2 else x + 2 | x <-xs]... Main> pmenoresk 30 [1,5,6,86,34,76,12,34,86,99] [1,25,36,88,36,78,144,36,88,101]

11 Uso de mais de um gerador... -- Determinar a lista dos pontos do plano dentro da -- regiao definida pela origem, a coordenada (eixo y) -- 5 e a abscissa (eixo x) 3. pontos = [ (x,y) | x <- [0..3], y <- [0..5]]... Main> pontos [(0,0),(0,1),(0,2),(0,3),(0,4),(0,5), (1,0),(1,1),(1,2),(1,3),(1,4),(1,5), (2,0),(2,1),(2,2),(2,3),(2,4),(2,5), (3,0),(3,1),(3,2),(3,3),(3,4),(3,5)]

12 Utilizando geradores e predicativos -- Determinar a lista dos pontos do plano dentro da -- regiao definida pela origem, a coordenada (eixo y) -- 5 e a abscissa (eixo x) 3. Considere apenas os -- pontos onde x é impar e y par. pontos1 = [ (x,y) | x <- [0..3], odd x, y <- [0..5], even y ]... Main> pontos1 [(1,0),(1,2),(1,4),(3,0),(3,2),(3,4)]

13 Exemplo Determinar os pares de valores, onde: o primeiro é múltiplo do segundo; o primeiro é dado pelos elementos impares de uma P.A de primeiro termo igual a 1, a razão igual 3 e o ultimo termo menor ou igual a 100; o segundo termo é dado pelos elementos de uma P.A de primeiro termo igual a 1, a razão igual 4 e o ultimo termo menor ou igual a 50; um dos dois é diferente da unidade; os dois termos são diferentes.

14 Solução A função paresE, traduz literalmente o enunciado. As P.A.'s são realizadas diretamente pelo mecanismo para definição de P.A. embutido na linguagem. Os predicativos foram inseridos na posição em que suas variáveis já estão instanciadas. paresE1 = [ (x,y) | x <- [1,4..100], odd x, y <- [1,5..50], (x /= 1 || y /= 1), x /= y, mod x y == 0] Main> paresE1 [(7,1),(13,1),(19,1),(25,1),(25,5),(31,1),(37,1), (43,1),(49,1),(55,1),(55,5),(61,1),(67,1),(73,1), (79,1),(85,1), (85,5),(85,17),(91,1),(91,13),(97,1)]


Carregar ppt "Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 34 Departamento de Informática Centro."

Apresentações semelhantes


Anúncios Google