







Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Os melhores documentos à venda: Trabalhos de alunos formados
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
INE 5363 - Programação Funcional - INE/CTC/UFSC - Curso de Bacharelado em Ciências da Computação. Prof. Dr. rer.nat. Aldo von Wangenheim - http://www.inf.ufsc.br/~awangenh/Funcional
Tipologia: Notas de aula
1 / 13
Esta página não é visível na pré-visualização
Não perca as partes importantes!
2.4.4. Resolução de alguns problemas de redução:
aqui N é substituído nos dois x, pois x está livre na subespressão
( λ x.z)(( λ x.xxy)(( λ x.xxy)) -> z
( λ x.z)(( λ x.xxy)( λ x.xxy)) ->( λ x.z)( (λ x.xxy)( λ x.xxy)y)
->( λ x.z)(( λ x.xxy)( λ x.xxy)yy)
Aqui, ao invés de reduzir o redex mais à esquerda, foi aplicado(λx.xxy) sobre (λx.xxy)
uma abstração-β sobre FIBO, podemos transformar esta defini- ção em:
FIBO = ( λ fibo.( λ n. (...fibo...fibo...)))FIBO
FIBO = H FIBO
FIBO = Y H
H=( λ fibo. λ n. IF (<= n 1) 1 (+ ( fibo (- n 1))( fibo (- n 2))))
Significar, exprimir, simbolizar
Há duas maneiras de se olhar para uma função:
mento, ou
uma função como uma seqüência de operações no tempo.
é encarada como um conjunto fixo de associações entre argumentos e seus valores de função correspondentes.
Nos capitulos anteriores vimos como uma expressão ser avaliada
pel aaplicação repetida de regras de redução.
expressões permitidas, sem fazer referência a o que essas fun-
sistema formal para a manipulação de símbolos sintáticos.
O desenvolvimento das regras de conversão foi baseado em nos-
sas intuições sobre funções abstratas e nos proveu uma semân-
Ficou em aberto, uma definição de significado.
Agora, um breve desenvovlimento informal da função Eval:
toda e qualquer expressão lambda E.
sintaxe do cálculo lambda já vistos até agora.
Supponhamos, primeiramente, que E seja uma variável x.
Que valor deveria Eval[[ x ]] possuir?
Como o valor de uma variável é dado pelo seu contexto circun-
dante, não podemos dizer o seu valor isoladamente.
Podemos solucionar este problema, dando a Eval[[ ]] um parâme-
é uma função que mapeia nomes de variáveis para seus valores.
argumento x”.
Para tratar aplicações, usamos um raciocínio semelhante: É
razoável dizer-se que o o valor de (E 1 E 2 ) deveri ser o valor de E 1
aplicado ao valor de E 2.
Certamente será uma função, de forma que nós o podemos definir
completamente dando o seu valor quando aplicada a um argu-
mento arbitrário a:
Resumindo:
valor do corpo da abstração, em um contexto onde o parâmetro formal está atado ao argumento.
mação de que a variável x está atada ao valor a”.
caso y seja uma variável diferente de x.
2.5.2. O Símbolo V
Uma das características mais úteis da teoria descrita nesta seção,
é que ela nos permite raciocinar a respeito da terminação ou não
terminação de programas.
forma normal : Como foi descrito antes, a redução de uma expressão pode não atingir uma forma normal.
elemento V, pronunciado “fundo”, no domínio dos valores de expressões, o qual é o valor de uma expressão sem uma forma normal :
Teoria dos Domínios.
uso muitas vezes nos permite escrever equações sucintas ao invés de montes de palavras obtusas.
2.5.3. Definindo a Semântica de Funções Embutidas e Constantes
Nesta seção veremos como definir o valor de Eval[[ k ]] onde k é
uma constante ou função embutida.
Exemplo: Qual é o valor de Eval[[ * ]]?
Certamente é uma função de dois argumentos e nós podemos
definí-la dando o valor desta função quando aplicada a argumen-
tos arbitrários:
Eval[[ ∗ ]] a b = a x b
que dá o valor do cálculo lambda * em termos da operação
matemática de multiplicação x.
A distinção entre ∗ e x é crucial:
No caso da multiplicação a notação matemática x difere da
notação de programa ∗. No caso da adição, por exemplo, o sím-
bolo + é usado em ambas. É importante notar-se a diferença.
A equação anterior é, porém, uma especificação incompleta para
∗. Temos de definir o que ∗ faz para todo argumento possível,
inclusive V. O conjunto completo de equações ficaria então:
Eval[[ ∗ ]] a b = a x b, caso a V e b V
Eval[[ ∗ ]] V b = V
Eval[[ ∗ ]] a V = V
≠ ≠
2.5.4. Estriticidade
Dizemos que uma função é estrita se temos certeza de que vamos
necessitar do valor de seu argumento.
mento e a avaliação do argumento não termina, então a aplica- ção de f ao argumento vai com certeza não terminar.
Esta descrição leva a uma definição concisa de estriticidade:
Uma função f é estrita se e somente se f V = V
Esta definição pode ser generalizada da mesma forma para fun-
ções de muitos argumentos.
Por exemplo: se g é uma função de três argumentos, então g é
estrita em seu segundo argumento se e somente se:
g a V c = V
2.5.5. Fim:
Nestas aulas foi dada uma visão, apenas superficial, do cálculo
lambda. O objetivo foi só mostrar o “que está por trás” da imple-
mentação de liguagens funcionais, já que não se pretende nesta
disciplina ensinar o uso do cálculo lambda para a criação de novas
linguagens funcionais.
2.5.6. LISP:
Oakey, Steve ; LISP para Micros. Editora Campus, 1986 ISBN 85-7001-326-