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

Slides:



Advertisements
Apresentações semelhantes
TIPOS ABSTRATOS DE DADOS
Advertisements

Python: Funções Claudio Esperança.
INTRODUÇÃO A COMPUTAÇÃO ENG. CIVIL
... para pessoas que não sabem c++
gerador de código intermediário
Linguagem de Programação I
Paulo Marques Hernâni Pedroso
3 Paradigmas e Linguagens de Programação
Recursividade Prof. Alex F. V. Machado
Programando com Alice Tim Margush Department of Computer Science University of Akron © 2006.
Algoritmos e Programação Linguagens de Programação Teoria Aula (09/06)
Padrão de Projeto Interpreter
Sobrecarga de Operadores
INTRODUÇÃO À PROGRAMAÇÃO
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Wagner Santos C. de Jesus
9 Controle de fluxo Seqüenciadores. Jumps. Escapes. Exceções.
Apresentação da linguagem Python
Linguagem C Funções.
Vetores, Matrizes e Funções
Revisão da Linguagem C.
Estrutura de Dados em Java
DESENVOLVIMENTO DE COMÉRCIO ELETRÔNICO
Otavio Bergmann e Raphael Miollo Parte 2 – Investigação e apresentação.
Paradigmas de programação
Ada.
Introdução a linguagem Python
Introdução a Computação e Cálculo Numérico
1 Funções (versão C) Funções são pedaços de código encapsulados para fácil acesso. Em C e C++ o processo de construção de uma função passa por 2 etapas.
Curso básico de PHP 1 Vantagens: Gratuito Multiplataforma Estável Rapidez Comunicação.
FTIN Formação Técnica em Informática
Programação II Estruturas de Dados Aula 02 - continuação
Introdução a Programação
Paradigmas de Linguagens de Programação Linguagem Imperativa 2
Expressões e Instrução de Atribuição
Semântica de Linguagens de Programação
Paradigmas de Linguagens de Programação Linguagem Imperativa 1
Linguagem de Expressões 2
Equipe: Fernando Calheiros Flavia Leite Eduardo Wagner
Classes, Objetos, Atributos e Métodos JAVA
Linguagem de Programação - III Ementa: Uma linguagem com o paradigma funcional (LF: Linguagem Funcional) Conteúdo: Contexto das Linguagens, Histórico de.
Java Bytecode Software Básico Mitsuo Takaki.
F UNÇÕES : PASSAGEM DE PARÂMETROS Aluno:Kaynã Vasconcelos Santos Matéria: Estrutura de dados e algoritmos I Turma: Professor: Danilo Silva dos Santos.
Programação Orientada à Objetos
Prof: Leandro Maranim Dei Santi Prof. Eduardo Rossit Paiossin
Paradigma funcional.
Capítulo VIII Ambientes de Execução
Wagner Santos C. de Jesus
Introdução à Linguagem C
Algumas notas sobre a linguagem de programação C
Faculdade Pernambucana - FAPE Setembro/2007
Aula Prática 3 Funções Monitoria Introdução à Programação.
Fundamentos de linguagens de programação
Recursividade Profs. De Prog2 e Lab2.
Semântica de Linguagens de Programação
1 Programação Multi-Paradigma Cristiano Bertolini – Ellison Siqueira – Guilherme Avelino –
Técnicas de IO em LF1/LF2 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier.
Paradigmas de Linguagens de Programação Conceitos da Linguagem Imperativa 1 Augusto Sampaio e Paulo Borba Centro de Informática Universidade Federal de.
Programação Computacional Aula 9: Meu primeiro programa em C
Programação Funcional 4a. Seção de Slides Tuplas e Definição de Funções Locais em Haskell.
Módulo II Capítulo 1: Orientação a Objetos
Comandos de Repetição (While, Do..While e For)
UCSal – Bacharelado em Informática Tópicos Especiais em Informática II Profa. Semíramis Assis
Linguagem de Programação 11 Estruturas de Decisão e Repetição. Prof. Luiz José Hoffmann Filho
Laço ou loop e repetição
Influencias sobre o Projeto da Linguagem
1 Programação Multi-Paradigma Cristiano Bertolini – Ellison Siqueira – Guilherme Avelino –
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
IF E ITERAÇÃO WHILE Dilvan Moreira (baseado no livro Big Java e T. Munzner)
Transcrição da apresentação:

1 IO em LF1 Paradigmas 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”. X = 1 Inc(a) =a inc (X) + inc(X)

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) =

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 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 Comandos imperativos Monads

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

17 Bibliografia l_programminghttp://en.wikipedia.org/wiki/Monads_in_functiona l_programming have-invented-monads-and.htmlhttp://sigfpe.blogspot.com/2006/08/you-could- have-invented-monads-and.html What the hell are Monads? – es/MONADS/Noel/research/monads.html