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

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

Programação Funcional

Apresentações semelhantes


Apresentação em tema: "Programação Funcional"— Transcrição da apresentação:

1 Programação Funcional
Introdução à Linguagem Funcional Haskell 1a. Seção de Slides

2 Autoria, Méritos, Agradecimentos, e Parceria
Vladimir Oliveira Di Iorio DPI - UFV

3 Alterações Responsabilidade: Claudio Cesar de Sá

4 Programação Funcional
Um programa funcional consiste de uma série de definições de funções. A execução de um programa funcional consiste em calcular o valor de uma expressão, usando as funções definidas. Há várias linguagem funcionais: LISP, Scheme, ML, Haskell (a escolhida), etc. Os programas escritos em Haskell são geralmente chamados de scripts, por isso a extensão normalmente é “hs” (hakell scripts).

5 Dados Histórico Haskell, criada em 1986, Simon Thompson e outros; Kent of Canterbury University Mais de 30 anos depois do Lisp e derivados O matemático e lógico Haskell Brooks Curry, trabalhou com -calculus; Foi aluno de doutorado de David Hilbert, em Göttingen, tendo obtido o grau de doutor em Hilbert (*23/01/ /14/02/43) foi o matemático mais influente do século XX Haskell 98 is the recent 'standard' version of Haskell. Various implementations: Hugs (interpreter for Windows, Mac, Unix) and GHC, NHC, HBC (compilers).

6 Livros Textos Haskell- The Craft of Functional Programming, Second Edition, Simon Thompson, Addison-Wesley, 507 pages, paperback, 1999 (está na fotocopiadora disponível)

7 O que é uma função? Uma função fornece um valor de output o qual depende de alguns valores de input: inputs output # 12 34 46

8 A proposta original de função:
f_função(A) 15 17 A b g_função(b)

9 Agora... Todos cidadãos de 1a. Classe ! A b f_função g_função

10 Exemplo de script em Haskell
O símbolo -- faz com que a parte da linha à sua direita seja um comentário. example.hs 4 answer :: Int 5 answer = 42 6 7 square :: Int -> Int 8 square x = x * x 9 10 allEqual :: Int -> Int -> Int -> Bool 11 allEqual m n p = (m==n) && (n==p) 12 13 maxi :: Int -> Int -> Int 14 maxi m n 15 | m >= n = m 16 | otherwise = n Declara uma nova função, especificando seu tipo. O símbolo :: pode ser lido como "é do tipo..." Sintaxe para aplicação de uma função f a argumentos a, b, c: f a b c Determina que answer tem o valor 42. Equação que define a função. Define o resultado, x*x , da aplicação de square sobre x (variável). Determina que square é uma função de Int para Int . square x Nomes de funções começam com letras minúsculas. Nomes de tipos começam com letras maiúsculas. allEqual m n p maxi m n

11 Exemplo de script em Haskell
example.hs 4 answer :: Int 5 answer = 42 6 7 square :: Int -> Int 8 square x = x * x 9 10 allEqual :: Int -> Int -> Int -> Bool 11 allEqual m n p = (m==n) && (n==p) 12 13 maxi :: Int -> Int -> Int 14 maxi m n 15 | m >= n = m 16 | otherwise = n Declara allEqual como uma função que recebe três objetos Int e retorna Bool. Retorna valor True ou False.

12 Exemplo de script em Haskell
example.hs 4 answer :: Int 5 answer = 42 6 7 square :: Int -> Int 8 square x = x * x 9 10 allEqual :: Int -> Int -> Int -> Bool 11 allEqual m n p = (m==n) && (n==p) 12 13 maxi :: Int -> Int -> Int 14 maxi m n 15 | m >= n = m 16 | otherwise = n Equação condicional, formada por cláusulas. O texto entre | e = determina uma guarda. O valor à direita de = é retornado se a guarda for verdadeira. Determina que maxi é uma função de recebe 2 objetos Int e retorna Int .

13 Outros Programas Soma dos inteiros de 0 a n: sumi 0 = 0
sumi n = (n-1) + n sumi n = sumi (n-1) + n 1 sumi :: Int -> Int 2 sumi n 3 | n <= 0 = 0 4 | otherwise = = n + sumi (n-1)

14 Exemplo de uma função 1 2 soma1 :: Int -> Int 3 soma = 1 4 soma1 n = n + soma1 (n-1) 5 6 7 Main> soma1 7 8 28 9 10 soma2 :: Int -> Int -> Int 11 soma2 n1 n2 | ( n1 == n2 ) = 0 12 soma2 n1 n2 = n2 + soma2 n1 (n2 -1) 13 14 15 Main> soma uma função que calcula a soma até N, recebe 1 objetos Int e um retorna Int . Uma função que calcula a soma de um N1 até um N2, ambos positivos. Essa recebe 2 objetos Int e um retorna Int ..

15 Cálculos em Haskell Como cálculos são efetuados em Haskell?
allEqual m n p = (m==n) && (n==p) allEqual 2 3 3 = (2==3) && (3==3) = False && True = False allEqual 5 5 5 = (5==5) && (5==5) = True && True = True

16 Mantenha as “guardas”:
-- max x y retorna o maior valor de dois números -- max :: Ord a => a -> a -> a -- isto é uma classe de tipo (mais tarde) max x y | x > y = x | otherwise = y Em geral: name pattern1 pattern2 ... patternn | guard1 = expression1 | guard2 = expression2 ... | guardm = expressionn (n>=0, m>=1)

17 Cálculos em Haskell Exemplos podem envolver mais de uma função:
allEqual (square 3) answer (square 2) = ((square 3) == answer) && (answer == (square 2)) = ((3*3) == 42) && (42 == (2*2)) = (9 == 42) && (42 == 4) = False && False = False answer :: Int answer = 42 Relembrando...

18 Cálculos em Haskell Exemplo envolvendo equação condicional: maxi m n
| m >= n = m | otherwise = n maxi 3 1 ?? 3>=1 = True = 3 maxi 3 4 ?? 3>=4 = False ?? otherwise = True = 4

19 Cálculos em Haskell Outro exemplo envolvendo equação condicional:
allEqual (maxi 1 5) 5 (maxi 4 2) = ((maxi 1 5) == 5) && (5 == (maxi 4 2)) A ordem de avaliação NÃO importa! Pode-se escolher qualquer uma das expressões e avaliá-la primeiro.

20 Cálculos em Haskell Outro exemplo envolvendo equação condicional:
allEqual (maxi 1 5) 5 (maxi 4 2) = ((maxi 1 5) == 5) && (5 == (maxi 4 2)) ?? 1>=5 = False ?? otherwise = True = (5 == 5) && (5 == (maxi 4 2)) ?? 4>=2 = True = (5 == 5) && (5 == 4) = True && False = False

21 Refletindo sobre o 1o. LAB:
Ambiente WinHugs (“casca” do Hugs); Precisa de um Editor de Texto externo; Cuidar do nome da extensão no Windows NT; :l “caminho\\nome_pgm.hs” ... load; Execução em linha de comando;

22 Hugs: Interpretador de Haskell
Ao executar Hugs, uma sessão é iniciada. O sistema carrega funções pré-definidas (Prelude.hs) e passa a esperar comandos: hugs Reading file "/usr/local/share/hugs/lib/Prelude.hs": Hugs session for: /usr/local/share/hugs/lib/Prelude.hs Type :? for help Prelude> Janela no Linux

23 Hugs: Interpretador de Haskell
Exemplo de interação - digitando expressões: Obs: sublinhado indica entrada digitada pelo usuário. Prelude> 2+3 5 Prelude> (1*6) == (3 `div` 5) False Prelude> sum [1..10] 55 Prelude> reverse "hugs is cool" "looc si sguh" Prelude>

24 Hugs: Interpretador de Haskell
Cada linha digitada é tratada como um comando. Se for uma expressão, então é tratada como um comando para avaliar a expressão. Alguns comandos importantes: :? imprime a lista de todos os comandos; :q abandona o interpretador; :load carrega definições a partir de um arquivo, Ex: :load exemplos.hs

25 Hugs: Interpretador de Haskell
Novas definições não podem ser criadas a partir da linha de comando. Devem ser carregadas a partir de arquivos. Suponha que o script apresentado esteja no arquivo "example.hs": Um módulo é uma coleção de funções, descritas em um arquivo. Se o módulo carregado não tem nome, o nome Main é utilizado. Se nada for carregado: Prelude Prelude> :load example.hs Reading file "example.hs": Hugs session for: /usr/local/share/hugs/lib/Prelude.hs example.hs Main>

26 Hugs: Interpretador de Haskell
Dando nome há um módulo .... Suponha arquivo "example.hs" como a seguir: -- example.hs module Exemplo1 where answer :: Int answer = 42 ... Define o nome do módulo que será carregado. Letras maúsculas ! ahahahah

27 Hugs: Interpretador de Haskell
Carregando novamente o arquivo: Prelude> :l example.hs Reading file "example.hs": Hugs session for: /usr/local/share/hugs/lib/Prelude.hs example.hs Exemplo1> maxi 3 4 4 Exemplo1>

28 Fim da 1a. Seção...

29 Acompanhe as instruções sobre o Laboratório:
Para 2as. (3as.) Feiras esteja com a folha do Laboratório em mãos (em papel); A entrega é em papel, a cada 15 dias, ou seja, é o lab a ser entregue é o de duas semanas passadas Comentários e respostas nos relatórios são obrigatórios.


Carregar ppt "Programação Funcional"

Apresentações semelhantes


Anúncios Google