haskell aula1 apresentação

16
Programação Funcional em Haskell 1a Reunião — Apresentação

Upload: crislanio-macedo

Post on 07-Aug-2015

34 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Haskell aula1 apresentação

Programação Funcional em Haskell1a Reunião — Apresentação

Page 2: Haskell aula1 apresentação

Conteúdo e objetivos

Introdução à programação funcional usando Haskell Objetivos de aprendizagem

Apresentar funções algumas funções da linguagem haskell;

Definir funções usando equações com padrões e guardas;

Implementar algoritmos recursivos elementares;

Page 3: Haskell aula1 apresentação

Funcionamento

Reuniões 2 x 2 h por semana

Página web Learn you a Haskell for great good! http://learnyouahaskell.com/

http://haskell.tailorfontela.com.br/introduction

Page 4: Haskell aula1 apresentação

O que é a programação funcional?

É um paradigma de programação

No paradigma imperativo, um programa é uma sequência de instruções que mudam células na memória

No paradigma funcional, um programa é um conjunto de definições de funções que aplicamos a valores

Exemplos de linguagens: Scheme, ML, O’Caml, Haskell, F#, Scala, Lisp

Page 5: Haskell aula1 apresentação

Exemplo: somar os naturais de 1 a 10

Em linguagem C: total = 0; for (i=1; i<=10; ++i) total = total + i;

O programa é uma sequência de instruções O resultado é obtido por mutação das variáveis i e total

Page 6: Haskell aula1 apresentação

Exemplo: somar os naturais de 1 a 10

Em Haskell:

sum [1..10]

O programa consiste na aplicação da função sum à lista dos inteiros entre 1 e 10.

Page 7: Haskell aula1 apresentação

Vantagens da programação funcional

Nível mais alto Programas mais concisos

Concorrencia/paralelismo A ordem de execução não afeta os resultados

Page 8: Haskell aula1 apresentação

Desvantagens da programação funcional

Maior distância do hardware

Compiladores/interpretadores mais complexos;

Difícil prever os custos de execução (tempo/espaço);

Page 9: Haskell aula1 apresentação

Haskell no mundo real

Algumas exemplos open-source:

GHC o compilador de Haskell é escrito em Haskell (!) Darcs um sistema distribuido para gestão de código-fonte

Page 10: Haskell aula1 apresentação

Haskell no mundo real

Utilizações em backend de aplicações web:

Bump mover ficheiros entre smartphones http://devblog.bu.mp/haskell-at-bump Janrain plataforma de user management http://janrain.com/blog/ functional-programming-social-web Chordify extração de acordes musicais http://chordify.net

Mais exemplos: http://www.haskell.org/haskellwiki/Haskell_in_industry

Page 11: Haskell aula1 apresentação

Glasgow Haskell Compiler (GHC)

Compilador que gera código-máquina nativo

Suporta Haskell 98, Haskell 2010 e bastantes extensões

Inclui também o interpretador ghci.

Disponível em http://www.haskell.org/ghc

Page 12: Haskell aula1 apresentação

Algumas funções

> head [1,2,3,4] obter o 1o elemento1

> tail [1,2,3,4] remover o 1º elemento[2,3,4]

> length [1,2,3,4,5] comprimento5

> take 3 [1,2,3,4,5] obter um prefixo[1,2,3]

> drop 3 [1,2,3,4,5] remover um prefixo[4,5]

Page 13: Haskell aula1 apresentação

Algumas funções

> [1,2,3] ++ [4,5] concatenar[1,2,3,4,5]

> reverse [1,2,3,4,5] inverter[5,4,3,2,1]

> [1,2,3,4,5] !! 3 indexação4

> sum [1,2,3,4,5] soma dos elementos15

> product [1,2,3,4,5] produto dos elementos120

Page 14: Haskell aula1 apresentação

Comandos úteis do interpretador GHCi

:load fich carregar um ficheiro

:reload re-carregar modificações

:edit editar o ficheiro actual

:set editor prog definir o editor

:type expr mostrar o tipo duma expressão

:help obter ajuda

:quit terminar a sessão

Podem ser abreviados, :l em vez de :load.

Page 15: Haskell aula1 apresentação

Indentação

Todas as definições num mesmo âmbito devem começar na mesma coluna.

a = 1 a = 1 a = 1 b = 2 b = 2 b = 2

c = 3 c = 3 c = 3ERRADO ERRADO OK

A ordem das definições não é relevante.

Page 16: Haskell aula1 apresentação

Comentários

Simples: começam por -- até ao final da linha Geral: delimitados por {- e -}

-- média de dois valoresmedia x y = (x+y)/2

{- ** as definições seguintes estão comentadas **dobro x = x+xquadrado x = x*x-}.