Cálculo Lambda Sem Tipos
|
|
- Heitor Sampaio Correia
- 6 Há anos
- Visualizações:
Transcrição
1 Cálculo Lambda Sem Tipos
2 Cálculo lambda sem tipos Peter Landin (60 s) observou que uma linguagem de programação pode ser compreendida formulando-a em um pequeno núcleo capturando suas características essenciais outras formas, chamadas de formas derivadas, podem ser compreeendidas traduzindo-as para o núcleo linguagem núcleo usada por Peter Landin foi o cálculo lambda Cálculo Lambda Sem Tipos UFRGS-2007 p.2/33
3 Cálculo lambda sem tipos Cálculo λ inventado por Alonzo Church na década de 20 toda computação pode ser reduzida a operações básicas de definição de função e aplicação de função computacionalmente completo Cálculo Lambda Sem Tipos UFRGS-2007 p.3/33
4 Cálculo lambda sem tipos LISP (John McCarthy, 50 s) foi implementada baseada no cálculo lambda cálculo λ largamente utilizado na especificação, projeto e implementação de linguagens de programação pode ser visto como uma linguagem de programação simples e, ao mesmo tempo, é um objeto matemático sobre o qual podemos fazer afirmações precisas que podem ser provadas Cálculo Lambda Sem Tipos UFRGS-2007 p.4/33
5 Outros cálculos CCS (Milner) - concorrência Cálculo π (Milner, Parrow e Walker) - concorrência e mobilidade Cálculo de objetos (Abadi e Cardeli) - para orientação a objetos vários outros cálculos... técnicas utilizadas com cálculo λ podem ser utilizadas também com esses outros cálculos Cálculo Lambda Sem Tipos UFRGS-2007 p.5/33
6 Conceitos básicos Abstração funcional (ou procedural) é freqüente em praticamente todas as linguagens de programação. A seqüência de computação repetitiva abaixo (succ succ 5) + (succ succ 3) (succ succ 2) pode ser reescrita na forma add2(5) + add2(3) add2(2) onde add2(x) = succ succ x Cálculo Lambda Sem Tipos UFRGS-2007 p.6/33
7 Cálculo λ add2 é simplesmente um nome dado para "função que dado argumento x, retorna x mais dois λx. succ succ x". Esta função existe independente do seu nome e pode ser escrita como: λx. succ succ x Cálculo Lambda Sem Tipos UFRGS-2007 p.7/33
8 Cálculo λ Na sua forma pura, tudo é função argumentos aceitos por funções são funções resultado retornado por uma função também é uma função Sintaxe Abstrata do cálculo λ: t ::= termos: x variável λx.t abstração t t aplicação Cálculo Lambda Sem Tipos UFRGS-2007 p.8/33
9 Sintaxe abstrata e concreta Gramática anterior descreve a sintaxe abstrata, ou seja descreve termos lambda como árvores. Quando representadas linearmente podem surgir ambigüidades. Que termo (que árvore de sintaxe abstrata), por exemplo, corresponde a x y z? Ambiguidade na representação linear de árvore é resolvida: usando parênteses, e adotando convenções que permitam reduzir o seu uso, ou adotando uma representação linear que evite tais ambiguidades (expressões S) Cálculo Lambda Sem Tipos UFRGS-2007 p.9/33
10 Sintaxe Abstrata Como resolver a ambigüidade que surge na interpretação de x y z? há uma convenção pela qual aplicação é associativa a esquerda. logo o termo acima tem a mesma interpretação de (x y) z usando notação S ele seria escrito na forma app(app(x,y),z) por exemplo Cálculo Lambda Sem Tipos UFRGS-2007 p.10/33
11 Sintaxe Abstrata Como resolver a ambigüidade que surge na interpretação de λx.λy.x y z convenção diz que abstrações lambda se extendem o mais a direita possível, ou seja, o termo acima corresponde a λx.(λy.((x y) z)) que, usando notação S, ficaria, por exemplo, na forma abs(x,abs(y,app(app(x,y), z))) Cálculo Lambda Sem Tipos UFRGS-2007 p.11/33
12 Escopo de variáveis Ocorrência de x é dita ligada quando ocorre no corpo de uma abstração λx.t. Uma ocorrência de x é livre se não é ligada. Exemplos: ocorrências de x nos termos x y e λy.x y são livres ocorrência de x nos termos λx.x e λx.λy.x (y z) são ligadas em (λx.x) x a primeira ocorrência de x é ligada e a segunda é livre Termo é fechado se não possui variáveis livres. Também é chamado de combinador Cálculo Lambda Sem Tipos UFRGS-2007 p.12/33
13 Semântica operacional Computação consiste basicamente em aplicar função a argumento: (λx.t 1 ) t 2 [x t 2 ] t 1 A notação [x t 2 ]t 1 representa o termo que resulta da substituição das ocorrências livres de x em t 1 pelo termo t 2. Por exemplo: o termo (λx. x) y é avaliado para y o termo (λx. x (λx.x)) (u r) é avaliado para (u r) (λx.x) Termo na forma (λx.t 1 ) t 2 é chamado redex Cálculo Lambda Sem Tipos UFRGS-2007 p.13/33
14 Semântica Operacional Existem diversas estratégias para avaliar um termo lambda. Cada uma diz a ordem na qual redexes devem ser avaliados. Considere o termo (λx.x) ((λx.x) (λz.(λx.x) z)). Chamando λx.x de id, por clareza, podemos escrevê-lo na forma id (id (λz.id z)) Esse termo tem 3 redexes (aparecem sublinhados abaixo): id (id (λz.id z)) id (id (λz.id z)) id (id (λz.id z)) Cálculo Lambda Sem Tipos UFRGS-2007 p.14/33
15 Redução β completa Redução β completa: qualquer redex pode ser escolhido. Uma seqüência possível de redução é a seguinte: id (id (λz.id z)) id (id (λz.z)) id (λz.z) λz.z Cálculo Lambda Sem Tipos UFRGS-2007 p.15/33
16 Ordem normal Ordem normal: preferência pelo redex mais externo, mais a esquerda. Única seqüência de redução possível: id (id (λz.id z)) id (λz.id z) λz.id z λz.z Cálculo Lambda Sem Tipos UFRGS-2007 p.16/33
17 Call by name Chamada por nome ou call by name: como ordem normal, mas não avalia o corpo de uma abstração lambda. Única seqüência possível: id (id (λz.id z)) id (λz.id z) λz.id z Cálculo Lambda Sem Tipos UFRGS-2007 p.17/33
18 Call by value Chamada por valor call by value. Só avalia redexes mais externos e redex só é reduzido se seu lado direito já estiver totalmente reduzido. Usado pela maioria das linguagens id (id (λz.id z)) id (λz.id z) λz.id z Cálculo Lambda Sem Tipos UFRGS-2007 p.18/33
19 Estratégias estritas X estratégias não estritas Estritas: argumentos de funções são sempre avaliados (mesmo que não sejam utilizados). Call by value é estrita Não estritas, também chamadas de lazy: somente avalia argumentos que são realmente utilizados. Call by name é não estrita Cálculo Lambda Sem Tipos UFRGS-2007 p.19/33
20 Semântica Operacional - call by value v ::= λx. t (λx.t) v [x v] t (β) t 1 t 1 t 1 t 2 t 1 t 2 (APP1) t 2 t 2 v t 2 v t 2 (APP2) Cálculo Lambda Sem Tipos UFRGS-2007 p.20/33
21 Múltiplos argumentos Até agora todas as funções são de um único argumento. Como representar funções de dois, ou mais argumentos? Usando funções de alta ordem, ou seja funções que podem retornar funções como resultado no lugar de λ(x,y).t usamos λx.λy.t se f = λx.λy.t, ao invés de f(a, b) escrevemos (f a) b Transformação de função de vários argumentos em função de alta ordem é chamada de currificação em homenagem a Haskell Curry (contemporâneo de Church) Cálculo Lambda Sem Tipos UFRGS-2007 p.21/33
22 Booleanos de Church Codificação de booleanos tru = λt.λf. t fls = λt.λf. f Definindo condicional na forma: test = λl. λm. λn. (l m) n temos que: test tru v w test fls v w retorna v retorna w Cálculo Lambda Sem Tipos UFRGS-2007 p.22/33
23 Pares Usando booleanos: pair fst snd = λf. λs. λb. b f s = λp.p tru = λp.p fls Reduzir o termo fst (pair v w) Cálculo Lambda Sem Tipos UFRGS-2007 p.23/33
24 Numerais de Church c 0 = λs.λz. z c 1 = λs.λz. s z c 2 = λs.λz. s s z c 3 = λs.λz. s s z... Cálculo Lambda Sem Tipos UFRGS-2007 p.24/33
25 Operações aritméticas scc = λn.λs.λz. s (n s z) plus = λm.λn.λs.λz.m s (n s z) times = λm.λn.m (plus n) c 0 iszro... = λm.λn (λx fls ) tru Cálculo Lambda Sem Tipos UFRGS-2007 p.25/33
26 Recursão a prova de que o cálculo lambda é computacionalmente completo consiste em provar que o poder de expressão da linguagem é igual ao de máquinas de Turing (ou ao da linguagem das funções recursivas, ou outro formalismo equivalente) o que fizemos foi mostrar como programar algumas funções e valores tais como valores verdade, números inteiros, condicionals, sucessor, predecessor, soma, etc para ser computacionalmente completo deve ser possível programar comportamento repetitivo! no cálculo lambda puro se obtém repetição com recursão! Cálculo Lambda Sem Tipos UFRGS-2007 p.26/33
27 Recursão no cálculo lambda puro alguns termos no cálculo lambda puro não podem ser avaliados para formas normais: omega = (λx. x x) (λx. x x) reduzindo esse redex obtemos ômega novamente! avaliação de omega exibe um comportamento repetitivo dizemos que termos sem forma normal divergem Cálculo Lambda Sem Tipos UFRGS-2007 p.27/33
28 Recursão no cálculo lambda puro o termo abaixo, chamado combinador de ponto fixo (ou combinador Y call-by-value), pode ser usado para definir funções recursivas fix = λf. (λx. f (λy. x x y)) (λx. f (λy. x x y)) podemos dizer que é uma versão "melhorada de omega difícil de entender por si só, o melhor é entender a forma como ele é usado Cálculo Lambda Sem Tipos UFRGS-2007 p.28/33
29 Recursão no cálculo lambda puro A função fatorial pode ser definida da seguinte forma: g = λfct. λn.if realeq n c 0 then c 1 else (times n (fct (prd n))) fatorial = fix g fatorial pode ser usado da seguinte forma fatorial c 3 Cálculo Lambda Sem Tipos UFRGS-2007 p.29/33
30 Extendendo o cálculo λ toda programação pode ser feita a partir do cálculo λ puro mais conveniente trabalhar com cálculo λ extendido com outros termos Cálculo Lambda Sem Tipos UFRGS-2007 p.30/33
31 Formalidades DEFINIÇÃO 1 O conjunto de variáveis livres de um termo t, denotado por FV (t), é definido como segue FV (x) = {x} FV (lambdax.t) = FV (t) {x} FV (t 1 t 2 ) = FV (t 1 ) FV (t 2 ) Cálculo Lambda Sem Tipos UFRGS-2007 p.31/33
32 Formalidades Substituição de variável livre no corpo de função é o mecanismo usado para passagem de argumento. Ela deve ser definida com cuidado, caso contrário ela pode ter como efeito indesejável a mudança do comportamento da função. Temors que diferem somente no nome de variáveis ligadas são equivalentes [x s]x = s [x s]x = y y x [x s](λy.t 1 ) = λy. [x s]t 1 x y e y FV (s) [x s](t 1 t 2 ) = [x s]t 1 [x s]t 2 Cálculo Lambda Sem Tipos UFRGS-2007 p.32/33
33 Referências O capítulo 5 de TPL - Bejnamim Pierce tem o necessário para a disciplina. Mais sobre cálculo lambda sem tipo em The Lambda Calculus - Henk Barendregt, Compêndio sobre cálculo lambda. A seção 2 de Lambda calculi with types - Henk Barendregt (no capítulo II do Handbook of Logic in Computer Science disponível também no site da disciplina) é sobre cálculo lambda sem tipos Cálculo Lambda Sem Tipos UFRGS-2007 p.33/33
Programação Funcional - Introdução a Cálculo Lambda
Programação Funcional - Introdução a Cálculo Lambda Cristiano Damiani Vasconcellos Universidade do Estado de Santa Catarina 1. Definição Cálculo lambda (λ-cálculo) é um modelo matemático capaz de ilustrar
Leia maisCentro Universitário do Triângulo
Centro Universitário do Triângulo Cálculo Lambda 1. Introdução A elaboração de modelos de computação (resolução de problemas por uma máquina) baseia-se em trabalhos de dois pesquisadores com enfoques bastante
Leia maisParadigmas de Programação
Paradigmas de Programação Fabrício Olivetti de França 14 de Junho de 2018 1 λ-cálculo 2 Computabilidade Computabilidade é uma área de estudo central da Ciência da Computação. Ela estuda a possibilidade
Leia maisLambda Cálculo e Programação Funcional. Programação Funcional Bacharelado em Sistemas de Informação Maio
Lambda Cálculo e Programação Funcional Programação Funcional Bacharelado em Sistemas de Informação Maio - 2009 Alonzo Church (1903 1995) Professor em Princeton, EUA (1929 1967) e UCLA (1967 1990) Inventou
Leia maisRedução de grafos. Pedro Vasconcelos. 4 de Março de 2014
Redução de grafos Pedro Vasconcelos 4 de Março de 2014 Semântica estrita vs. não-estrita Como implementar ((λx. M) N)? Semântica estrita Call-by-value avaliar N uma vez (mesmo quando não usado) Semântica
Leia maisFunções Recursivas. Prof.: Edson Holanda Teoria da computação - Diverio e Menezes
Funções Recursivas Prof.: Edson Holanda edsonholanda@gmail.com Teoria da computação - Diverio e Menezes Tipos de Formalismos Operacional Define-se uma máquina abstrata, baseada em estados, em instruções
Leia maisLinguagens de Programação Funcional
Linguagens de Programação Funcional Conceitos de Linguagens de Programação Pedro Libório Setembro de 2013 2 Roteiro Introdução Funções matemáticas Fundamentos das linguagens de programação funcionais A
Leia maisINE Programação Funcional - Transparência Resolução de alguns problemas de redução:
INE 5363 - Programação Funcional - Transparência 47 2.4.4. Resolução de alguns problemas de redução: 1. Redução direta: (λx.x(xy))n-> N(Ny) aqui N é substituído nos dois x, pois x está livre na subespressão
Leia maisIntrodução à Programação Funcional
Introdução à Programação Funcional PPGIA - PUCPR Prof. Fabrício Enembreck 1 Conteúdo Introdução ao Cálculo Lambda e à Programação Funcional Introdução ao LISP e ao CLisp Funções Lambda e binding Funções
Leia maisProgramação Funcional Cálculo Lambda - Aula Nº 3
Programação Funcional Cálculo Lambda - Aula Nº 3 2.3. Ordem de Redução Se uma expressão não contém mais redexes, então a avaliação está completa. Um expressão nesta forma é dita estar na forma normal.
Leia maisPrimeira Prova de Linguagens de Programação - DCC024 -
Primeira Prova de Linguagens de Programação - DCC024 - Ciência da Computação Nome: Eu dou minha palavra de honra que não trapacearei neste exame. Número de matrícula: As regras do jogo: A prova é sem consulta.
Leia maisPrimeira Prova de Linguagens de Programação - DCC024 - Sistemas de Informação
Primeira Prova de Linguagens de Programação - DCC024 - Sistemas de Informação Nome: Eu dou minha palavra de honra que não trapacearei neste exame. Número de matrícula: As regras do jogo: A prova é sem
Leia maisMinicurso 1 Uma introdução ao cálculo lambda e a linguagens de programação funcionais
Minicurso 1 Uma introdução ao cálculo lambda e a linguagens de programação funcionais Rodrigo Machado rma@infufrgsbr 2/68 Conteúdo Ideias iniciais Cálculo lambda Sintaxe Operação de substituição Equivalência
Leia maisProva. t ::= t t. t 1 t 4 t 2 t 3 (t 1 t 2 ) (t 3 t 4 ) (t 2 t 1 ) (t 4 t 3 )
Sistema de Tipos - II/UFRGS 1 1. Marque verdadeiro ou falso: Prova ( ) A relação de avaliação small-step deve ser determinística (ou seja para qualquer termo deve existir somente uma maneira para ele progredir
Leia maisLinguagens de Programação Programação Funcional (Haskell)
Linguagens de Programação Programação Funcional (Haskell) Andrei Rimsa Álvares Sumário Introdução Programação funcional Linguagens funcionais Haskell Casamento de padrões Funções de ordem superior Avaliação
Leia maisMódulo II: Implementação do λ-calculus
Módulo II: Implementação do λ-calculus 0 Módulo II: Implementação do λ-calculus MCC - 2 o ano José Bernardo Barros (jbb@di.uminho.pt) José Carlos Bacelar Almeida (bacelar@di.uminho.pt) Departamento de
Leia maisProgramação Funcional. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2012.
Programação Funcional Capítulo 1 Introdução José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/35 1 Programação Funcional 2 Algumas características de Haskell
Leia maisSemântica de Linguagens de Programação
Semântica de Linguagens de Programação Fabio Mascarenhas - 2011.2 http://www.dcc.ufrj.br/~fabiom/sem Introdução Quais das expressões abaixo têm o mesmo significado? a[42] (vector-ref a 42) a[42] a[42]
Leia maisIntrodução ao cálculo-λ
Introdução ao cálculo-λ Pedro Vasconcelos 13 de Fevereiro de 2014 O que é o cálculo-λ? É um modelo computação universal (i.e., equipotente à máquina de Turing) Ao contrário da MT, o cálculo-λ é também
Leia maispuras um ou mais apenas mesmos
Funções Relembrando um dos objetivos do paradigma de programação funcional: Escrever funções puras Na prática, uma função pura apresenta as seguintes características: Possui um ou mais parâmetros; Realiza
Leia maisLinguagem Funcional Haskell
Bacharelado em Ciência da Computação PARADIGMAS DE PROGRAMAÇÃO Linguagem Funcional Haskell Prof. Claudinei Dias email: prof.claudinei.dias@gmail.com Principais Linguagens Funcionais LISP (John McCarthy,
Leia maisUniversidade Estadual De Santa Cruz (UESC)
Universidade Estadual De Santa Cruz (UESC) CET087 - Conceitos de Linguagem de Programação Prof. Dr. Marcelo Ossamu Honda Departamento de Ciências Exatas e Tecnológicas (DCET) mohonda.uesc(at)google(.)com
Leia maisProgramas em L1 pertencem ao conjunto de árvores de sintaxe abstrata definido pela gramática abstrata abaixo:
1 Semântica Operacional e Sistemas de Tipos Vamos definir a semântica operacional de uma série de linguagens no estilo conhecido por semântica operacional estrutural chamado também de semântica operacional
Leia maisMódulo I: λ-calculus. MCC - 2 o ano. Departamento de Informática Universidade do Minho. Módulo I: λ-calculus 0. 2 o semestre
Módulo I: λ-calculus 0 Módulo I: λ-calculus MCC - 2 o ano José Bernardo Barros (jbb@di.uminho.pt) José Carlos Bacelar Almeida (bacelar@di.uminho.pt) Departamento de Informática Universidade do Minho Módulo
Leia maisLinguagens de Programação e Programação Funcional
Linguagens de Programação e Programação Funcional GSI004 Aula 01* Faculdade de Computação UFU *baseada nos slides do Professor Paulo Henrique Ribeiro Gabriel 30 de setembro de 2014 GSI004 Aula 01 30 de
Leia maisSEMÂNTICA. Rogério Rocha. rode = program simples = var x : int := 3 in x := x + 5 end.
SEMÂNTICA program simples = var x : int := 3 in x := x + 5 end. rode =? Rogério Rocha Roteiro Introdução Sintaxe Semântica Dinâmica (Métodos formais) Operacional Axiomática Denotacional Estática Conclusão
Leia maisUSANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS. Bruno Maffeo Departamento de Informática PUC-Rio
USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS Bruno Maffeo Departamento de Informática PUC-Rio MÉTODO INDUTIVO O método indutivo para resolver problemas aqui empregado inspira-se na formulação mais
Leia maisA máquina SECD. Pedro Vasconcelos. 20 de Fevereiro de 2014
A máquina SECD Pedro Vasconcelos 20 de Fevereiro de 2014 O que é a máquina SECD? Um interpretador da linguagem funcional ISWIM (Landin, 1964) Máquina virtual para compilação LISP/Scheme (Henderson, 1980)
Leia maisLinguagens de Programação
Linguagens de Programação Fabio Mascarenhas - 2015.2 http://www.dcc.ufrj.br/~fabiom/lp Introdução Quais das expressões abaixo têm o mesmo significado? (vector-ref a 42) Introdução Quais das expressões
Leia maisPrincipais paradigmas de programação. Programação imperativa Programação funcional Programação lógica Programação OO
Principais paradigmas de programação Programação imperativa Programação funcional Programação lógica Programação OO Programação Imperativa É o paradigma mais usado. Programas são definidos através de sequências
Leia maisUniversidade Estadual de Santa Cruz
Universidade Estadual de Santa Cruz Conceitos de Linguagens de Programação Linguagens Imperativas e Funcionais Prof. Dr. Rogério Vargas Ilhéus-Ba, 16 de Maio de 2013. Linguagens Imperativas Linguagens
Leia maisO Cálculo λ sem Tipos
Capítulo 2 O Cálculo λ sem Tipos 21 Síntaxe e Redução Por volta de 1930 o cálculo lambda sem tipos foi introduzido como uma fundação para a lógica e a matemática Embora este objectivo não tenha sido cumprido
Leia maisMatemática Discreta para Ciência da Computação
Matemática Discreta para Ciência da Computação P. Blauth Menezes blauth@inf.ufrgs.br Departamento de Informática Teórica Instituto de Informática / UFRGS Matemática Discreta para Ciência da Computação
Leia maisLinguagens de Programação
Linguagens de Programação Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/lp Ambientes Substituição é uma semântica inspirada na forma como calculamos expressões algébricas, mas vimos que ela
Leia maisLinguagens de Programação
Linguagens de Programação Fabio Mascarenhas - 2015.2 http://www.dcc.ufrj.br/~fabiom/lp fun - uma mini-linguagem funcional Agora que vimos como se usa uma linguagem funcional como Scala, vamos estudar como
Leia maisSobre Equações Recursivas e Construções de Ponto Fixo Parte I
Sobre Equações Recursivas e Construções de Ponto Fixo Parte I Alfio Martini www.inf.pucrs.br/alfio Clube de Lógica em Ciência da Computação Faculdade de Informática - PUCRS 19 de setembro de 2013 Sumário
Leia maisao paradigma imperativo
PARADIGMA FUNCIONAL PARADIGMA FUNCIONAL: INTRODUÇÃO G Exemplos de linguagens funcionais LISP - Início: LP puramente funcional - Depois: acréscimo de alguns recursos imperativos (aumentaram eficiência de
Leia maisTeoria da Computação
Ciência da Computação Teoria da Computação (ENG10395) Profa. Juliana Pinheiro Campos E-mail: jupcampos@gmail.com Funções recursivas Os formalismos usados para especificar algoritmos podem ser classificados
Leia maisIntuição da sintaxe de L2 (35)
2.2 A Linguagem L2 2.2 A Linguagem L2 A linguagem L2 é uma extensão de L1 com funções recursivas, memória (acesso e atualização de variáveis), sequência de comandos ( ; ) e laço de repetição while. Primeiro,
Leia maisLíngua Natural EXERCÍCIOS RESOLVIDOS
Mestrado em Engenharia Informática e de Computadores Língua Natural EXERCÍCIOS RESOLVIDOS (Linguagem Lambda) 3ª Edição Nuno Mamede Maio 2010 Departamento de Engenharia Informática Instituto Superior Técnico
Leia maisLinguagens Formais e Autômatos P. Blauth Menezes
Linguagens Formais e Autômatos P. Blauth Menezes blauth@inf.ufrgs.br Departamento de Informática Teórica Instituto de Informática / UFRGS Matemática Discreta para Ciência da Computação - P. Blauth Menezes
Leia maisCompiladores - Gramáticas
Compiladores - Gramáticas Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Análise Sintática A análise sintática agrupa os tokens em uma árvore sintática de acordo com a estrutura do programa
Leia maisJuliana Kaizer Vizzotto. Universidade Federal de Santa Maria. Disciplina de Teoria da Computação
Universidade Federal de Santa Maria Disciplina de Teoria da Computação Quais são as capacidades e limitações fundamentais dos computadores? Funções Computáveis Algoritmo: descrição finitade uma computação
Leia maisNelma Moreira. Departamento de Ciência de Computadores da FCUP. Aula 20
Fundamentos de Linguagens de Programação Nelma Moreira Departamento de Ciência de Computadores da FCUP Fundamentos de Linguagens de Programação Aula 20 Nelma Moreira (DCC-FC) Fundamentos de Linguagens
Leia maisCompiladores - Gramáticas
Compiladores - Gramáticas Fabio Mascarenhas 2018.1 http://www.dcc.ufrj.br/~fabiom/comp Análise Sintática A análise sintática agrupa os tokens em uma árvore sintática de acordo com a estrutura do programa
Leia maisParadigmas de Programação
Paradigmas de Programação Sintaxe e semântica Aula 4 Prof.: Edilberto M. Silva http://www.edilms.eti.br Prof. Edilberto Silva / edilms.eti.br Sintaxe A sintaxe de uma linguagem de programação é a forma
Leia maisACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO
ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO 2. Linguagens Livres-do-Contexto Referência: SIPSER, M. Introdução à Teoria da Computação. 2ª edição, Ed. Thomson Prof. Marcelo S. Lauretto marcelolauretto@usp.br
Leia maisComputação efectiva. Que linguagens podem ser reconhecidas por algum tipo de autómato?
Computação efectiva Que linguagens podem ser reconhecidas por algum tipo de autómato? O que é ser computável? Que linguagens são computáveis? Existem linguagens que não são computáveis? Isto é, existem
Leia maisSistemas de Tipos. Cristiano Damiani Vasconcellos.
1 / 35 Sistemas de Tipos Cristiano Damiani Vasconcellos cristiano.vasconcellos@udesc.br Departamento de Ciência da Computação Universidade do Estado de Santa Catarina Tipos 2 / 35 Tipos: Coleção de valores
Leia maisLinguagem Haskell. Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação. Tiago Carneiro 19 Agosto 2013
Linguagem Haskell Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação Tiago Carneiro 19 Agosto 2013 1 1 Linguagem Haskell Linguagem de programação funcional É um paradigma de programação
Leia maisLinguagens de Programação
Linguagens de Programação Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/lp Let é açúcar sintático Notem a semelhança no interpretador entre o código de let e o código de aplicar uma função
Leia maisProcedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens
Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens 1 Introdução Estudar computação do ponto de vista teórico é sinônimo de caracterizar
Leia maisExpressões Lambda. Programação Funcional. Capítulo 7. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto
Programação Funcional Capítulo 7 Expressões Lambda José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/64 1 Valores de primeira classe 2 Expressão lambda 3 Aplicação
Leia maisUma Aula Prática sobre LISP
MAC 5710 - Estruturas de Dados - 2008 Linguagem LISP Surgiu no final dos anos 50 - John McCarthy (MIT). Linguagem para processamento simbólico. Muito usada em aplicações em Inteligência Artificial. Outras
Leia maisPedro Vasconcelos DCC/FCUP. Programação Funcional 19 a Aula Raciocinar sobre programas
Programação Funcional 19 a Aula Raciocinar sobre programas Pedro Vasconcelos DCC/FCUP 2014 Raciocínio equacional Para simplificar expressões matemáticas podemos usar igualdades algébricas como regras de
Leia maisUniversidade de Aveiro Departamento de Matemática. Alexandra Isabel Fernandes Espinha Abreu. Fundamentos Matemáticos da Programação Funcional
Universidade de Aveiro Departamento de Matemática 2009 Alexandra Isabel Fernandes Espinha Abreu Fundamentos Matemáticos da Programação Funcional 2 Universidade de Aveiro Departamento de Matemática 2009
Leia maisLinguagens de Programação
Linguagens de Programação Fabio Mascarenhas - 2015.2 http://www.dcc.ufrj.br/~fabiom/lp Ambientes Substituição é uma semântica inspirada na forma como calculamos expressões algébricas, mas vimos que ela
Leia mais2.2. A Semântica Operacional do Cálculo Lambda
2.2. A Semântica Operacional do Cálculo Lambda Até agora foi descrita a sintaxe do cálculocomo calcular com ele.. Para chamá-lo de cálculo, devemos porém dizer Basicamente isto é realizado através de três
Leia maisPedro Vasconcelos DCC/FCUP. Programação Funcional 3 a Aula Definição de funções
Programação Funcional 3 a Aula Definição de funções Pedro Vasconcelos DCC/FCUP 2014 Definição de funções Podemos definir novas funções simples usando funções pré-definidas. minuscula :: Char -> Bool minuscula
Leia maisLinguagens de Programação
Linguagens de Programação Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/lp Expressões condicionais Scala tem uma expressão if-else para expressar escolha entre alternativas que se parece muito
Leia maisCompiladores. Simão Melo de Sousa. Computer Science Department University of Beira Interior, Portugal. S. Melo de Sousa Compiladores
Compiladores Verificação e inferência dos Tipos Simão Melo de Sousa Computer Science Department University of Beira Interior, Portugal Problema Permitir evitar declarar o tipo das variáveis, das assinaturas
Leia maisProgramação Funcional
Programação Funcional Lucília Camarão de Figueiredo Universidade Federal de Ouro Preto lucilia@dcc.ufmg.br Aula 01: Introdução 1 PARADIGMAS DE PROGRAMAÇÃO Imperativo (FORTRAN, PL1, Ada, C, Pascal) Sequência
Leia maisAula prática 5. Funções Recursivas
Programação Funcional UFOP DECOM 2014.1 Aula prática 5 Funções Recursivas Resumo Definições recursivas são comuns na programação funcional. Nesta aula vamos aprender a definir funções recursivas. Sumário
Leia maisImplementação de Linguagens
Implementação de Linguagens Pedro Vasconcelos DCC/FCUP 11 de Abril de 2016 Objectivos Introdução à implementação de linguagens de programação funcionais. Enfoce sobre técnicas de interpretação/compilação
Leia maisTécnicas de análise de algoritmos
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS Técnicas de análise de algoritmos Algoritmos e Estruturas de Dados I Natália Batista https://sites.google.com/site/nataliacefetmg/ nataliabatista@decom.cefetmg.br
Leia maisSistemas de Tipos. Cristiano Damiani Vasconcellos.
1 / 39 Sistemas de Tipos Cristiano Damiani Vasconcellos cristiano.vasconcellos@udesc.br Departamento de Ciência da Computação Universidade do Estado de Santa Catarina Tipos 2 / 39 Tipos: Coleção de valores
Leia maisSCC Introdução à Teoria da Computação
SCC-0505 João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos http://www.icmc.usp.br/~joaoluis/ joaoluis@icmc.usp.br
Leia maisINE5416 Paradigmas de Programação. Ricardo Azambuja Silveira INE CTC UFSC E Mail: URL:
INE5416 Paradigmas de Programação Ricardo Azambuja Silveira INE CTC UFSC E Mail: silveira@inf.ufsc.br URL: www.inf.ufsc.br/~silveira Conceitos Léxica estudo dos símbolos que compõem uma linguagem Sintaxe
Leia maisMAC 0316/5754 Conceitos de Linguagens de Programação Primeiro Semestre de 2011 Terceira Prova 21 de junho de 2011
MAC 0316/5754 Conceitos de Linguagens de Programação Primeiro Semestre de 2011 Terceira Prova 21 de junho de 2011 Nome do aluno: Assinatura: N ō USP: Instruções: 1. Preencha o cabeçalho acima. 2. Não destaque
Leia maisLinguagens Livres de Contexto
Linguagens Livres de Contexto 1 Roteiro Gramáticas livres de contexto Representação de linguagens livres de contexto Formas normais para gramáticas livres de contexto Gramáticas ambíguas Autômatos de Pilha
Leia maisSistemas de Tipos. Cristiano Damiani Vasconcellos.
1 / 24 Sistemas de Tipos Cristiano Damiani Vasconcellos cristiano.vasconcellos@udesc.br Departamento de Ciência da Computação Universidade do Estado de Santa Catarina Tipos 2 / 24 Tipos: Coleção de valores
Leia maisProgramação Funcional
Programação Funcional Lucília Camarão de Figueiredo Universidade Federal de Ouro Preto lucilia@dcc.ufmg.br Aula 04: Definição de funções 1 DEFINIÇÃO DE FUNÇÕES f x1 x2...xn = E Define uma função f de tipo
Leia maisConceitos de Linguagem de Programação - 2
Conceitos de Linguagem de Programação - 2 Arthur Jovita Guerra Thalles Santos Silva Universidade Estadual de Santa Cruz - Ilhéus, BA 1 de novembro de 2011 1 Revisão Natureza das linguagens de Programação
Leia maisProgramação de Computadores
Programação de Computadores Instituto de Computação UFF Departamento de Ciência da Computação Otton Teixeira da Silveira Filho Conteúdo Alguns Conceitos sobre Conceito de Algoritmo Pseudocódigo Tipos de
Leia maisCompiladores - Especificando Sintaxe
Compiladores - Especificando Sintaxe Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Análise Sintática A análise sintática agrupa os tokens em uma árvore sintática de acordo com a estrutura
Leia maisCapítulo 2: Procedimentos e algoritmos
Capítulo 2: Procedimentos e algoritmos Para estudar o processo de computação de um ponto de vista teórico, com a finalidade de caracterizar o que é ou não é computável, é necessário introduzir um modelo
Leia maisProgramação de Computadores
Programação de Computadores Instituto de Computação UFF Departamento de Ciência da Computação Otton Teixeira da Silveira Filho Conteúdo Alguns Conceitos sobre Linguagens Conceito de Algoritmo Pseudocódigo
Leia maisCapítulo 7. Expressões e Sentenças de Atribuição
Capítulo 7 Expressões e Sentenças de Atribuição Introdução Expressões são os meios fundamentais de especificar computações em uma linguagem de programação Para entender a avaliação de expressões, é necessário
Leia maisProf. A. G. Silva. 25 de setembro de Prof. A. G. Silva INE5603 Introdução à POO 25 de setembro de / 35
INE5603 Introdução à POO Prof. A. G. Silva 25 de setembro de 2017 Prof. A. G. Silva INE5603 Introdução à POO 25 de setembro de 2017 1 / 35 Baseado em materiais da Recursividade Unisinos, Cesar Tacla (UTFPR),
Leia maisEstruturas de dados. Pedro Vasconcelos. 3 de Março de 2014
Estruturas de dados Pedro Vasconcelos 3 de Março de 2014 Estruturas de dados Nesta aula vamos extender a linguagem FUN com estruturas de dados: pares e tuplos; variantes; records. Bibliografia: Capítulo
Leia maisUNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo
UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO Prof.ª Danielle Casillo Diferentes computadores podem ter diferentes arquiteturas e os diversos tipos de linguagem de programação.
Leia maisSemântica Operacional
Semântica Conceitos Semântica é o estudo do significado. Incide sobre a relação entre significantes, tais como palavras, frases, sinais e símbolos, e o que eles representam, a sua denotação. Semântica
Leia maisTipo de argumentos. valor. argumentos
Operação Numero de argumentos Tipo de argumentos valor (+ ) 2 ou + Numérico Soma ( ) 2 ou + Numérico Subtração ( ) 1 Numérico Simétrico (/ ...) 2 ou + Numérico Divisão (cos
Leia maisAula 05: - Recursão (parte 1)
MCTA028 Programação Estruturada Aula 05: - Recursão (parte 1) Prof. João Henrique Kleinschmidt Material elaborado pelo prof. Jesús P. Mena-Chalco 3Q-20108 Recursão: Se você ainda não entendeu; Ver: "Recursão".
Leia maisAula prática 14. Expressão Lambda
Programação Funcional UFOP DECOM 2014.1 Aula prática 14 Expressão Lambda Sumário Resumo Expressões lambdas são funções anônimas que podem ser usadas como qualquer outro valor de primeira classe. Nesta
Leia maisInformações. Programação Funcional. Por que um curso de programação funcional? O que é Programação Funcional? Objetivos da programação funcional
Informações Sérgio Soares scbs@cin.ufpe.br Linguagens de Programação 2 Paradigma de Carga Horária: 60h Horário: 2 as e 6 as das 10h30 as 12h10 Local: 2 as no LIP4 e 6 as no LIP1 Grupo http://groups.yahoo.com/group/lp2_poli
Leia maisAula 2: Linguagem Proposicional
Lógica para Computação Primeiro Semestre, 2015 Aula 2: Linguagem Proposicional DAINF-UTFPR Prof. Ricardo Dutra da Silva Linguagens naturais, como o nosso Português, podem expressar ideias ambíguas ou imprecisas.
Leia maisTeoria da Computação Prof. Lucília Figueiredo Prova 03 - ENTREGA DIA 24/06/2015. (a) Descreva o programa da MT usando um pseudocódigo.
Teoria da Computação Prof. Lucília Figueiredo Prova 03 - ENTREGA DIA 24/06/2015 DECOM ICEB - UFOP Nome legível: Matrícula: As questões podem devem ser respondidas na própria prova, a caneta ou a lápis.
Leia maisCompiladores Análise Semântica
Compiladores Análise Semântica Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Árvores Sintáticas Abstratas (ASTs) A árvore de análise sintática tem muita informação redundante Separadores,
Leia maisTRANSFORMAÇÃO DE GRAMÁTICAS LIVRES DO CONTEXTO PARA EXPRESSÕES REGULARES ESTENDIDAS
TRANSFORMAÇÃO DE GRAMÁTICAS LIVRES DO CONTEXTO PARA EXPRESSÕES REGULARES ESTENDIDAS Acadêmico: Cleison Vander Ambrosi Orientador: José Roque Voltolini da Silva Roteiro da Apresentação Introdução Motivação
Leia maisInterpretação e Compilação de Linguagens de Programação Abstração Funcional
Interpretação e Compilação de Linguagens de Programação Abstração Funcional 11 de Abril de 2013 1 Introdução Nesta aula introduz-se a noção de abstração funcional em linguagens de programação. A abstração
Leia maisLinguagens de Programação Funcional
Linguagens de Programação Funcional George Darmiton da Cunha Cavalcanti (gdcc@cin.ufpe.br) Introdução O projeto de linguagem imperativas é baseado na arquitetura de von Neumann Eficiência é o objetivo
Leia maisProgramação de Computadores
Programação de Computadores Instituto de Computação UFF Departamento de Ciência da Computação Otton Teixeira da Silveira Filho Conteúdo Alguns Conceitos sobre Linguagens Paradigmas para linguagens de Programação
Leia maisIntrodução Maquinas de Turing universais O problema da parada. Indecidibilidade. Rodrigo Gabriel Ferreira Soares DEINFO - UFRPE.
DEINFO - UFRPE Julho, 2014 Motivação Introdução O que pode ser computado? E mais intrigantemente, o que não pode ser computado? Motivação Introdução O que pode ser computado? E mais intrigantemente, o
Leia maisCalculus of Communicating Systems - CCS (Cálculo de Sistemas Comunicantes)
(Cálculo de Sistemas Comunicantes) Caesar Ralf Franz Hoppen¹, Elias Ricken Medeiros¹ ¹Instituto de Informática Universidade Federal do Rio Grande do Sul (UFRGS) Caixa Postal 15.064 91.501-970 Porto Alegre
Leia maisLinguagens de Programação. Programação Funcional e Haskell Declarando Tipos Thiago Alves
Linguagens de Programação Programação Funcional e Haskell Declarando Tipos Thiago Alves 1 Declarações de Tipos Em Haskell, um novo nome para um tipo existente pode ser definido usando uma declaração de
Leia maisAutômatos e Linguagens
Autômatos e Linguagens Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Agosto, 2016 1 / 41 Sumário 1 Compiladores 2 Linguagens de programação 3 Ciência dos compiladores
Leia maisLinguagens de Programação
Visão Geral Faculdade de Computação - UFU Agosto - 2009 1 Princípios 2 O que é uma linguagem de programação? Linguagens naturais facilitam a expressão e o intercâmbio de idéias entre as pessoas. Assim
Leia maisProgramação Procedimental
Programação Procedimental Maria Adriana Vidigal de Lima Universidade Federal de Uberlândia - 2013 1 Escrita de Algoritmos 1.1 Técnicas de Programação e Algoritmos Na elaboração de programas maiores e complexos
Leia mais