Programação Funcional BCC222. Aula 2. Avaliação



Documentos relacionados
INTRODUÇÃO À PROGRAMAÇÃO BCC 201 TURMAS 31, 32 E AULA TEÓRICA 4 PROF. MARCELO LUIZ SILVA (R E D)

Laboratório de Programação I

Aula prática 2. Definindo Funções. Resumo Vamos aprender nesta aula a fazer nossas primeiras definições de função. 1 Scripts 1.

Programação Funcional

Introdução à Programação

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis

Programação Funcional. Capítulo 2. Primeiros Passos. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2013.

Pedro Vasconcelos DCC/FCUP. Programação Funcional 1 a Aula Apresentação

Introdução à Programação

Pesquisa de Marketing: Uma Orientação Aplicada (Portuguese Edition)

Programação Funcional. Capítulo 13. Mônadas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2013.

Algoritmos e Programação Conceitos e Estruturas básicas (Variáveis, constantes, tipos de dados)

Programação de Computadores

INTRODUÇÃO À PROGRAMAÇÃO BCC 201 TURMAS 31, 32 E AULA TEÓRICA 2 PROF. MARCELO LUIZ SILVA (R E D)

Vaporpunk - A fazenda-relógio (Portuguese Edition)

Receitas na Pressão - Vol. 01: 50 Receitas para Panela de Pressão Elétrica (Portuguese Edition)

ANDROID APPLICATION PROJECT

2.3. PHP Tipos de dados e operadores

PROVA COMENTADA E RESOLVIDA PELOS PROFESSORES DO CURSO POSITIVO

Sintaxe Básica de Java Parte 1

Algoritmos e Linguagem de Programação I

Expressões. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

2. OPERADORES ALGORITMOS, FLUXOGRAMAS E PROGRAMAS FUNÇÕES... 10

Java Como Programar, 8/E

Endomarketing de A a Z (Portuguese Edition) By Analisa de Medeiros Brum

Guião M. Descrição das actividades

Avaliação de Expressões

Linguagem algorítmica: Portugol

Linguagem e Técnicas de Programação I Operadores, expressões e funções. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.

INTRODUÇÃO AO JAVA PARA PROGRAMADORES C

Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++.

Álgebra Booleana. Introdução ao Computador 2010/01 Renan Manola

Desafios tecnológicos para o Projeto Observatório Logístico de Transporte

Capítulo 13. VARIÁVEIS DO TIPO REAL DUPLA

Poder sem limites - o caminho do sucesso pessoal pela programação neurolinguística

PROGRAMA DE DISCIPLINA

INTRODUÇÃO À LINGUAGEM C++

Bíblia do Obreiro - Almeida Revista e Atualizada: Concordância Dicionário Auxílios Cerimônias (Portuguese Edition)

Introdução aos cálculos de datas

Planejamento de comunicação integrada (Portuguese Edition)

Tabela de símbolos: tabelas de espalhamento

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Accessing the contents of the Moodle Acessando o conteúdo do Moodle

Princípios de Direito Previdenciário (Portuguese Edition)

Programação Funcional BCC222. Aulas 5,6. Mais sobre recursão

Pesquisa Qualitativa do Início ao Fim (Métodos de Pesquisa) (Portuguese Edition)

e à Linguagem de Programação Python

Aula Teórica 12. Material Didático Proposto

Teoria Económica Clássica e Neoclássica

Métodos Os métodos de uma classe podem ser classificados como construtores, destrutores, funções ou procedimentos.

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

Scripts Shell. João Medeiros 1 / 20

Programação: Tipos, Variáveis e Expressões

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: Prof. Dr. Raimundo Moura

Noções Várias em Visual Basic

Portas Lógicas Básicas Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 2h/60h

Capítulo 2: Introdução à Linguagem C

Introdução a Java. Hélder Nunes

Resolução de problemas e desenvolvimento de algoritmos

O Processo de Programação

Introdução A Delphi Com Banco De Dados Firebird (Portuguese Edition)

TEN CATE. HISTOLOGIA ORAL (EM PORTUGUESE DO BRASIL) BY ANTONIO NANCI

15 a Aula Subprogramação /Subalgoritmos Função e Procedimento

Meditacao da Luz: O Caminho da Simplicidade

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Módulo Lógica Programação com aplicações em Java. Projeto khouse Profissionalizante Profª Larissa Brandão

Universidade Federal de Minas Gerais

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

Go para programação paralela

Universidade Federal de Minas Gerais Escola de Engenharia Departamento de Engenharia Eletrônica

INTRODUÇÃO OBJECT PASCAL/DELPHI

Introdução a Linguagem C


Primeiro Curso de Programação em C 3 a Edição

Notas de Aula - Álgebra de Boole Parte 1

Formação de Administradores de Redes Linux LPI level 1. Aula 2 SENAC TI Fernando Costa

Como testar componentes eletrônicos - volume 1 (Portuguese Edition)

Aula Teórica 16: Estruturas de Dados Heterogêneas

Oficina de MATLAB Nível Básico Aula 1

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

O que é o JavaScript?

Orientação a Objetos com Java

Google Android: crie aplicações para celulares e tablets (Portuguese Edition)

Disciplina de Banco de Dados Introdução

Componentes da linguagem C++

Buscai as coisas do alto (Portuguese Edition)

Fr A Lógica Da Resolução Das Questões Usando Apenas Multiplicação E Divisão (Portuguese Edition)

Algoritmos e Programação _ Departamento de Informática

LÓGICA DE PROGRAMAÇÃO. Vitor Valerio de Souza Campos

Conceitos de Linguagens de Programação (Portuguese Edition)

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s

Programação de Computadores. Professor Ilaim Costa Junior

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

PROGRAMA DE DISCIPLINA

REPRESENTAÇÃO DE DADOS EM SISTEMAS DE COMPUTAÇÃO AULA 03 Arquitetura de Computadores Gil Eduardo de Andrade

Transcrição:

Programação Funcional BCC222 Aula 2 Avaliação Lucília Camarão de Figueiredo Departamento de Ciência da Computação Universidade Federal de Ouro Preto

Parte I Regra de Leibniz

O que é uma função? Uma receita para gerar uma saída a partir de dados de entrada: Multiplicar um número por ele próprio Um conjunto de pares (entrada, saída): (1,1) (2,4) (3,9) (4,16) (5,25)... Uma equação f x = x 2 Um gráfico relacionando entradas e saídas (apenas para números):

Operações sobre números C:\Users\lucilia>ghci GHCi, version 6.10.4: www.haskell.org/ghc/ :? for help Loading package ghc-prim... linking... done. Loading package integer... linking... done. Loading package base... linking... done. Prelude>3 + 3 6 Prelude>3 * 3 9

Funções sobre números lect02.hs square :: Integer -> Integer square x = x * x pyth :: Integer -> Integer -> Integer pyth a b = square a + square b

Testando suas funções C:\Users\lucilia>ghci lect02b.hs GHCi, version 6.10.4: www.haskell.org/ghc/ :? for help Loading package ghc-prim... linking... done. Loading package integer... linking... done. Loading package base... linking... done. [1 of 1] Compiling Main ( lect02b.hs, interpreted ) Ok, modules loaded: Main. *Main> square 3 9 *Main> pyth 3 4 25

Mais alguns testes *Main> square 0 0 *Main> square 1 1 *Main> square 2 4 *Main> square 3 9 *Main> square 4 16 *Main> square (-3) 9 *Main> square 10000000000 100000000000000000000

Declaração e avaliação Declaração (file lect02a.hs) square :: Integer -> Integer square x = x * x pyth :: Integer -> Integer -> Integer pyth a b = square a + square b Avaliação % ghci lect02a.hs GHCi, version 6.10.4: www.haskell.org/ghc/ :? for help Loading package ghc-prim... linking... done. Loading package integer... linking... done. Loading package base... linking... done. [1 of 1] Compiling Main ( lect02b.hs, interpreted ) Ok, modules loaded: Main. *Main> pyth 3 4 25 *Main>

Regra de Leibniz square :: Integer -> Integer square x = x * x pyth :: Integer -> Integer -> Integer pyth a b = square a + square b Equals may be substituted for equals. Gottfried Wilhelm Leibniz (1646 1716) = = = = pyth 3 4 square 3 + square 4 3*3 + 4*4 9 + 16 25

Operações numéricas são funções (+) :: Integer -> Integer -> Integer (*) :: Integer -> Integer -> Integer Main*> 3+4 7 Main*> 3*4 12 3 + 4 é o mesmo que (+) 3 4 3 * 4 é o mesmo que (*) 3 4 Main*> (+) 3 4 7 Main*> (*) 3 4 12

Precedencia e parenteses Aplicação de função tem precedencia sobre operadores infixados. = square 3 + square 4 (square 3) + (square 4) Multiplicação tem precedencia sobre adição. = 3*3 + 4*4 (3*3) + (4*4)

Associatividade Adição é associativa. = = = = 3 + (4 + 5) 3 + 9 12 7 + 5 (3 + 4) + 5 Adição é associativa à esquerda. 3 + 4 + 5 significa (3 + 4) + 5

Parte II Xadrez

Tipos de dados Integers: 42, -69 Floats: 3.14 Characters: h Strings: "hello" Pictures:

Aplicando uma função invert :: knight :: Picture -> Picture Picture invert knight

Compondo funções beside :: flipv :: invert :: knight :: Picture -> Picture -> Picture Picture -> Picture Picture -> Picture Picture beside (invert knight) (flipv knight)

Definindo uma nova função double :: Picture -> Picture double p = beside (invert p) (flipv p) double knight

Definindo uma nova função double :: Picture -> Picture double p = beside (invert p) (flipv p) double knight

Terminologia Declaração de tipo (assinatura) makepicture :: Picture -> Picture Declaração de função makepicture p = sidebyside (invert p) (flipv p) nome da função corpo da função

Terminologia parâmetro formal argumento (parâmetro real) definição de função expressão

Parte III QuickCheck

Um programa (file lect02a.hs) square :: Integer -> Integer square x = x * x pyth :: Integer -> Integer -> Integer pyth a b = square a + square b

Executando o programa (file lect02a.hs) % ghci lect02a.hs GHCi, version 6.10.4: www.haskell.org/ghc/ :? for help Loading package ghc-prim... linking... done. Loading package integer... linking... done. Loading package base... linking... done. [1 of 1] Compiling Main ( lect02b.hs, interpreted ) Ok, modules loaded: Main. *Main> square 3 9 *Main> pyth 3 4 25 *Main>

Outro programa (file lect02b.hs) import Test.QuickCheck square :: Integer -> Integer square x = x * x pyth :: Integer -> Integer -> Integer pyth a b = square a + square b prop_square :: Integer -> Bool prop_square x = square x >= 0 prop_squares :: Integer -> Integer -> Bool prop_squares x y = square (x+y) == square x + 2*x*y + square y prop_pyth :: Integer -> Integer -> Bool prop_pyth x y = square (x+y) == pyth x y + 2*x*y

Executando o outro programa (arquivo lect02b.hs) % ghci lect02a.hs GHCi, version 6.10.4: www.haskell.org/ghc/ :? for help Loading package ghc-prim... linking... done. Loading package integer... linking... done. Loading package base... linking... done. [1 of 1] Compiling Main ( lect02b.hs, interpreted ) Ok, modules loaded: Main. *Main> quickcheck prop_square Loading package old-locale-1.0.0.0... linking... done. Loading package old-time-1.0.0.0... linking... done. Loading package random-1.0.0.0... linking... done. Loading package mtl-1.1.0.1... linking... done. Loading package QuickCheck-2.1... linking... done. +++ OK, passed 100 tests. *Main> quickcheck prop_squares +++ OK, passed 100 tests. *Main> quickcheck prop_pyth +++ OK, passed 100 tests.

Parte IV Regra de Leibniz (reprise)

Gottfried Wilhelm Leibniz (1646 1716) Antecipou a lógica simbólica e descobriu o cálculo diferencial e integral (independentemente de Newton). The only way to rectify our reasonings is to make them as tangible as those of the Mathematicians, so that we can find our error at a glance, and when there are disputes among persons, we can simply say: Let us calculate, without further ado, to see who is right. In symbols one observes an advantage in discovery which is greatest when they express the exact nature of a thing briefly and, as it were, picture it; then indeed the labor of thought is wonderfully diminished.