Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouMaria de Fátima Borba Penha Alterado mais de 9 anos atrás
1
1 IO em LF1 Paradigmas de Linguagens de Programação 2007 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier
2
2 Objetivos Permitir que a Linguagem Funcional 1 possa executar funções de IO da mesma forma que Haskell permite.
3
3 Problema LF1 é uma linguagem funcional e funções de IO são do paradigma imperativo.
4
4 Funcional x Imperativa Linguagens funcionais são focadas em avaliar funções matemáticas e não têm noções de estado. Enquanto linguagens imperativas são focadas em estados. Linguagens funcionais prezam por transparência referencial enquanto o uso de comandos imperativos podem remover essa propriedade.
5
5 Transparência Referencial Transparência referencial: É uma propriedade que “quando uma expressão ‘e’ de uma linguagem é substituída por um valor ‘V’ e esse valor ‘V’ é o resultado da avaliação dessa expressão ‘e’, a semântica do programa não se altera”. X = 1 Inc(a) =a + 1 2 + inc (X) + inc(X)2 + 2 + 2
6
6 Transparência Referencial Em linguagens imperativas, a transparência referencial. Int x = 1; ( x é uma variável global) Int inc (a) = a++; 2 + incrementa(x) + incrementa(x) = 2 + 2 + 3
7
7 Quando se usa uma função de IO em que o usuário entra com um dado pelo teclado, essa função pode retornar valores diferentes para a mesma função com os mesmos parâmetros. –Ex: getInt (retorno depende do que o usuário digitar) Isso quebra a transparência referencial! Transparência Referencial
8
8 Linguagens funcionais, como Haskell, utilizam Monads para encapsular esses valores em um único tipo, o tipo IO. Mantendo assim, a transparência referencial. Nosso projeto se baseia nesse conceito.
9
9 Monads Linguagem funcional Comandos imperativos Monads
10
10 Monads A utilização de monads é necessária para executar operações que são mais próximas à linguagem imperativa do que a linguagem funcional dentro da linguagem funcional. Essas operações são operações de IO e mudanças de estado.
11
11 Monads Esses tipos de operações introduzem na linguagem efeitos colaterais (alterar valores e estados sem retornar nenhum valor) –Ex: funções void de C Usando monads, essa expressão que causa efeito colateral retorna um valor “descrevendo” um efeito colateral desejado –Ex: funções void retornam um tipo IO
12
12 Monads em Haskell Alguns tipos de Monads e operadores disponíveis em Haskell: >>= >> Maybe Return <- DO IO
13
13 Regras simples para utilizar a notação de Monads em Haskell Para executar várias ações em seqüência, como em uma linguagem imperativa, utiliza-se o DO –Exemplo: do putString(“Digite Algo”) a <- getString b = a++a putString(b)
14
14 Regras simples para utilizar a notação de Monads em Haskell Funções de IO como put*, sempre retornam um tipo IO() Funções de IO como get*, retornam um tipo IO(tipo do get) –Ex: getInt retorna IO(int)
15
15 Regras simples para utilizar a notação de Monads em Haskell O operador <- sempre recebe um tipo IO encapsulando outro tipo, e desencapsula esse tipo –Ex: int <- IO(int) Exemplo Let a = getInt in do b <- a b + 1
16
16 Dificuldades The most difficult concept to master, while learning Haskell, is that of understanding and using monads. (Yet Another Haskell Tutorial)
17
17 Bibliografia http://www.haskell.org/tutorial/io.html http://en.wikipedia.org/wiki/Monads_in_functiona l_programminghttp://en.wikipedia.org/wiki/Monads_in_functiona l_programming http://www.prairienet.org/~dsb/monads.htm http://sigfpe.blogspot.com/2006/08/you-could- have-invented-monads-and.htmlhttp://sigfpe.blogspot.com/2006/08/you-could- have-invented-monads-and.html What the hell are Monads? –http://web.cecs.pdx.edu/~antoy/Courses/TPFLP/lectur es/MONADS/Noel/research/monads.html
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.