1 / 17

IO em LF1 Paradigmas de Linguagens de Programação 2007

IO em LF1 Paradigmas de Linguagens de Programação 2007. Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier. Objetivos. Permitir que a Linguagem Funcional 1 possa executar funções de IO da mesma forma que Haskell permite. Problema.

tieve
Download Presentation

IO em LF1 Paradigmas de Linguagens de Programação 2007

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Objetivos • Permitir que a Linguagem Funcional 1 possa executar funções de IO da mesma forma que Haskell permite.

  3. Problema • LF1 é uma linguagem funcional e funções de IO são do paradigma imperativo.

  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. 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”.

  6. Transparência Referencial • Em linguagens imperativas, a transparência referencial.

  7. Transparência Referencial • 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!

  8. Transparência Referencial • 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. Monads Linguagem funcional Monads Comandos imperativos

  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. 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. Monads em Haskell • Alguns tipos de Monads e operadores disponíveis em Haskell: >>= >> Maybe Return <- DO IO

  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. 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. 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. Dificuldades • The mostdifficult concept to master, while learning Haskell, is that of understanding and using monads. (Yet Another Haskell Tutorial)

  17. Bibliografia • http://www.haskell.org/tutorial/io.html • http://en.wikipedia.org/wiki/Monads_in_functional_programming • http://www.prairienet.org/~dsb/monads.htm • http://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/lectures/MONADS/Noel/research/monads.html

More Related