







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
Encontra documentos específicos para os exames da tua universidade
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
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-