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

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

1 IO em LF1 Paradigmas de Linguagens de Programação 2007 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier.

Apresentações semelhantes


Apresentação em tema: "1 IO em LF1 Paradigmas de Linguagens de Programação 2007 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier."— Transcrição da apresentação:

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


Carregar ppt "1 IO em LF1 Paradigmas de Linguagens de Programação 2007 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier."

Apresentações semelhantes


Anúncios Google