Linguagens de Programação Aula 14

Documentos relacionados
Listas em Haskell. Listas. Linguagem Haskell. Maria Adriana Vidigal de Lima. Faculdade de Computação - UFU. Setembro

Linguagem Haskell. Riocemar S. de Santana

Conceitos de Linguagens de Programação

Pedro Vasconcelos DCC/FCUP. Programação Funcional 3 a Aula Definição de funções

Pedro Vasconcelos DCC/FCUP. Programação Funcional 4 a Aula Listas

Aula Prática 2. Paradigmas da Programação I / Programação Funcional

Linguagens de Programação Aula 13

Layout. Módulos. Normalmente, cada módulo está armazenado num ficheiro com o mesmo nome do módulo. Exemplo.hs

Vetores em Haskell. Vetores e Matrizes. Linguagem Haskell. Maria Adriana Vidigal de Lima. Faculdade de Computação - UFU.

Aula Prática 3. Paradigmas da Programação I / Programação Funcional. ESI/MCC 1 o ano (2005/2006)

Aula prática 5. Funções Recursivas

Programação Funcional

Tuplas. Linguagem Haskell. Maria Adriana Vidigal de Lima. Faculdade de Computação - UFU. Setembro

Introdução à Programação uma Abordagem Funcional

Linguagem Funcional Haskell

Expressões Condicionais

Pedro Vasconcelos DCC/FCUP. Programação Funcional 14 a Aula Um verificador de tautologia

Pedro Vasconcelos DCC/FCUP. Programação Funcional 13 a Aula Definição de tipos

Algoritmos e Estrutura de Dados Aula 08 Pilhas

Programação Funcional em Haskell

Linguagens de Programação. Programação Funcional. Carlos Bazilio

Linguagens de Programação. Programação Funcional e Haskell Programação Interativa Thiago Alves

Expressões Lambda. Programação Funcional. Capítulo 7. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

Tipos Algébricos. Programação Funcional. Capítulo 11. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

Casamento de Padrão. Programação Funcional. Capítulo 6. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

Pedro Vasconcelos DCC/FCUP. Programação Funcional 5 a Aula Definições recursivas

Casamento de Padrão. Programação Funcional. Capítulo 5. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

Grupo de Usuários Java do Noroeste Paulista. Tópicos Avançados em Java

Programação Funcional Aulas 5 & 6

Aula de hoje. Expressões. Expressões. Expressões. Exemplos. Programa em Python. SCC Introdução à Programação para Engenharias

Pedro Vasconcelos DCC/FCUP. Programação Funcional 2 a Aula Tipos e classes

Funções de Ordem Superior

EXPRESSÕES ARITMÉTICAS PARTE 1

Professor: Domingos Equipe Haskell: Lucas Montesuma, Francisco Leonardo CONCEITOS DA LINGUAGEM DE PROGRAMAÇÃO CÁLCULADORA EM HASKELL

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza.

Algoritmo e Programação Matemática

Bacharelado em Sistemas de Informação Programação Funcional. Lista de Exercicios - Linguagem Haskell

Compiladores - Gramáticas

TÉCNICO DE INFORMÁTICA - SISTEMAS

Expressão Condicional

Linguagens Formais e Autômatos 02/2015. LFA Aula 02. introdução 28/09/2015. Celso Olivete Júnior.

Programação de Computadores I Dados, Operadores e Expressões PROFESSORA CINTIA CAETANO

Algoritmos I Aula 13 Linguagem de Programação Java

Funções de Ordem Superior

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Variáveis e Entrada de Dados Marco André Lopes Mendes marcoandre.googlepages.

12 Indicador de Passagem

01/08/2011. Tipos de dados Numéricos Alfanuméricos Lógicos. Numéricos. Tipos de dados. Dados Numéricos Inteiros. Dados Numéricos Reais.

Análise Sintática Introdução

A resposta apresentada em aula, no quadro, (em Chapin e/ou Português Estruturado) está correta?

Noções de algoritmos - Aula 1

Algoritmos I Aula 8 Estrutura de controle: seleção

Aulas 10 e 11 / 18 e 20 de abril

Nelma Moreira. Departamento de Ciência de Computadores da FCUP. Aula 12

Introdução a Computação

Introdução à Programação I

Universidade Federal Fluminense ICEx Volta Redonda Introdução a Matemática Superior Professora: Marina Sequeiros

Curso básico de JavaScript Aula 2

Faculdade Anglo-Americano Curso de Ciência da Computação Linguagem de Programação. Lista de Exercícios 1

Noções de algoritmos - Aula 1

Como construir um compilador utilizando ferramentas Java

Exercícios Repetição

BAC004 Informática Teórica T2 Professora: Fabiana Costa Guedes Lista 05 Vetores e Matrizes Vetores

LO GICA E TE CNICA DE PROGRAMAC ÃO. TÁSSIO JOSÉ GONÇALVES GOMES

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Introdução a Programação. Curso: Sistemas de Informação Programação I José R. Merlin

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

Resolução De Problemas Em Informática. Docente: Ana Paula Afonso Resolução de Problemas. 1. Analisar o problema

Aula 4 Expressões e Operadores Cleverton Hentz

LFA Aula 09. Gramáticas e Linguagens Livres de Contexto 18/01/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior.

Teoria da Computação e Algoritmos. Introdução à Linguagem Pascal. ALGORITMO <Nome do algoritmo>; <definições>; INÍCIO <Comandos>; FIM.

Introdução à UML. Prof. Jesus José de Oliveira Neto

Exercícios: Recursão

DURAÇÃO DA PROVA: 2 horas

USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS. Bruno Maffeo Departamento de Informática PUC-Rio

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

MINISTÉRIO DA EDUCAÇÃO E DO DESPORTO UNIVERSIDADE FEDERAL DE VIÇOSA DEPARTAMENTO DE MATEMÁTICA

Introdução à Linguagem C++

Mini apostila de Python - Oficina de Vestibulandos. PET Computação - UFPR September 2016

Fundamentos 1. Lógica de Predicados

Aula 7: Portas Lógicas: AND, OR, NOT, XOR, NAND e NOR

Programação Funcional. Aula 4. Definindo Funções. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011.

Linguagens de Programação Funcional

Processamento da informação. Prof. Fabrício Olivetti de França

Introdução à Automação

Pedro Vasconcelos DCC/FCUP. Programação Funcional 16 a Aula Árvores equilibradas

Lista Encadeada (Linked List)

Conceitos Básicos de Programação

Pilha. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

Lógica para programação II Seção 1 - Histórico e Introdução Primeiros Programas

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

LINGUAGEM C: COMANDOS DE CONTROLE CONDICIONAL

Transcrição:

Linguagens de Programação Aula 14 Celso Olivete Júnior olivete@fct.unesp.br

Na aula passada Linguagem Haskell Funções Tipos básicos Expressões 2

Na aula de hoje Linguagem Haskell Listas 3

Listas e Tuplas A linguagem Haskell nos fornece dois mecanismos para a construção de dados compostos: listas e tuplas A lista possibilita a união de vários elementos - todos do mesmo tipo - numa única estrutura. Numa tupla podemos combinar os componentes de um dado numa única estrutura, e os componentes podem ter tipos e propriedades distintas. 4

Listas Fundamentos Uma lista é uma estrutura de dados que representa uma coleção de objetos homogêneos em sequência. Para alcançar qualquer elemento, todos os anteriores a ele devem ser recuperados. Em programação, uma lista vazia (representada por [ ] em Haskell) é a estrutura base da existência de uma lista. 5

Listas Fundamentos Uma lista é composta sempre de dois segmentos: cabeça (head) e corpo (tail). A cabeça da lista é sempre o primeiro elemento. > ['a','b','c','d'] "abcd" > 'a':['b','c','d'] "abcd 6

Listas Operador (:) O símbolo (:) é o operador de construção de listas. Toda lista é construída através deste operador. Exemplos: Hugs> 'a':['b','c','d'] "abcd" Hugs> 2:[4,6,8] [2,4,6,8] 7

Listas Hugs> 'a':['b','c','d'] "abcd" Hugs> 1:[2,3] [1,2,3] Hugs> ['a','c','f'] == 'a':['c','f'] True Hugs> [1,2,3] == 1:2:3:[] True Hugs> 1:[2,3] == 1:2:[3] True Hugs> "papel" == 'p':['a','p','e','l'] True 8

Escrevendo Listas Pode-se definir uma lista indicando os limites inferior e superior de um conjunto conhecido, onde existe uma relação de ordem entre os elementos, no seguinte formato: [ <limite-inferior>.. <limite-superior> ] > [1..4] [1,2,3,4] > ['m'..'n'] "mn" > [1,3..6] [1,3,5] > ['a','d'..'p'] "adgjmp" > [3.1..7] [3.1,4.1,5.1,6.1,7.1] 9

Escrevendo Listas Podemos definir qualquer progressão aritmética em uma lista utilizando a seguinte notação: [ <1o. termo>, <2o. termo>.. <limite-superior> ] > [7,6..3] [7,6,5,4,3] > [6,5..0] [6,5,4,3,2,1,0] > [-5,2..16] [-5,2,9,16] > [5,6..5] [5] > [1,1.1.. 2] [1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0] 10

Listas por compreensão A descrição de uma lista pode ser feita em termos dos elementos de uma outra lista. Por exemplo, temos a lista L1 = [2,4,7]. Uma lista definida por compreensão pode ser escrita: > [ 2 * n n <- L1 ] [4,8,14] A lista resultante contém todos os elementos da lista L1, multiplicados por 2. Assim, podemos ler: Obtenha todos os 2*n dos elementos n contidos em L1 = [2,4,7]. 11

Listas por compreensão Exemplos listaquad = [x^2 x <- [1..30]] >listaquad [1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400,441,484,529,576,625,676,7 29,784,841,900] listaquadinf = [ x^2 x <- [1..] ] > listaquadinf [1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400,441,484,529,576,625,676,7 29,784,841,900,961,1024,1089,1156,1225,1296,1369,1444,1521,1600... > elem 4 listaquadinf True A função elem verifica se um elemento pertence a uma lista. Retorna True/False. 12

Gerador e Expressões Booleanas Na definição de lista por compreensão, o símbolo <- é chamado de gerador da lista, pois permite obter os dados através dos quais a nova lista será construída. Os geradores podem ser combinados com um ou mais testes, que são expressões booleanas. listaquadpares = [x^2 x <- [1..20], even x] Hugs> listaquadpares [4,16,36,64,100,144,196,256,324,400] 13

Gerador e Express oes Booleanas listaquadparessup = [x^2 x <- [1..20], even x, x > 6] Hugs> listaquadparessup [64,100,144,196,256,324,400] 14

Listas com mais de um Gerador Adicionalmente, é possível que mais de um gerador seja utilizado na definição de uma lista por compreensão: Hugs> [ x*y x <- [1,2,3], y <- [3,7,9]] [3,7,9,6,14,18,9,21,27] Hugs> [(x,y) x <- [1,3,5], y <- [2,4,6], x < y] [(1,2),(1,4),(1,6),(3,4),(3,6),(5,6)] 15

Listas Funções Pré-definidas Funções Pré-definidas 16

Listas Funções Pré-definidas Funções Pré-definidas 17

Listas Funções Pré-definidas Funções Pré-definidas 18

Listas Funções Pré-definidas Funções Pré-definidas 19

Listas Exemplos sobre funções pré-definidas gerapalindroma n = [1..n] ++ reverse [1..n] > gerapalindroma 5 [1,2,3,4,5,5,4,3,2,1] fat n = produto [1..n] > fat 5 120 20

Listas Funções recursivas Para que possamos contar quantos elementos estão contidos numa lista, podemos escrever uma função recursiva: conta:: [t] -> Int conta [] = 0 conta (a:x) = 1 + conta x > conta ['a','b','c'] 3 Conta é uma função polimórfica, servindo para listas de qualquer tipo ( t e uma variável de tipo, e pode ser substituída por qualquer tipo). 21

Listas função pertence pertence:: Eq t => t -> [t] -> Bool pertence a [] = False pertence a (x:z) = if (a == x) then True else pertence a z > pertence 3 [4,5,2,1] False 22

Listas encontrar o maior elemento maior [x] = x maior (x:y:resto) x > y = maior (x: resto) otherwise = maior (y: resto) > maior [4,5,2,1] 5 23

Exercícios 1. Remover um elemento da lista a partir de sua posição 2. Defina funções para implementar a união e interseção entre duas listas. 3. Analise a função abaixo e descreva sua funcionalidade. Em seguida teste a função no interpretador WinHugs. misterio :: String -> String misterio p = [c c<-p, c>='a' && c<='z'] 4. Escreva uma função para calcular a média dos elementos de uma lista de números. Podem-se usar duas funções, uma para obter a quantidade de elementos e outra para obter a soma dos elementos, e finalmente, calcular a divisão entre a soma e a quantidade. 24

Exercícios 5. Defina uma função que dada uma lista de inteiros, retorna o número de elementos de valor superior a um número n qualquer. > retornasup 4 [3,2,5,6] 6. Defina uma função que dada uma lista de inteiros, retorna outra lista que contém apenas de elementos de valor superior a um número n qualquer. > retornalistasup 4 [3,2,5,6] [5,6] 25

Exercícios 7. Escreva uma função que recebe duas listas de inteiros e produz uma lista de listas. Cada uma corresponde à multiplicação de um elemento da primeira lista por todos os elementos da segunda. > mult_listas [1,2] [3,2,5] [[3,2,5],[6,4,10]] 8. Escreva uma função para verificar se os elementos de uma lista são distintos. 9. Seja a função união abaixo, definida através da construção de listas por compreensão. Teste esta função e implemente a interseção utilizando a mesma estratégia. uniao :: Eq t => [t] -> [t] -> [t] uniao as bs = as ++ [b b <- bs, not (pertence b as)] 26