linguagem funcional

Download Linguagem Funcional

Post on 01-Jul-2015

310 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

2.2 Linguagens de Programao Funcional

Ghezzi 2.2.1 Jazayeri

At agora lidamos com as linguagens de PROGRAMAO ORIENTADA A COMANDO, chamadas de IMPERATIVASFortemente afetadas pela arquitetura dos computadores convencionais

{Em vez disso, as linguagens de PROGRAMAO FUNCIONAL baseiam-se na

TEORIA DAS FUNES MATEMTICAS

2.2. Linguagens de Programao FuncionalA motivao das linguagens funcionais

2.2.2

Ghezzi Jazayeri

no a eficincia da execuo e sim os seguintes aspectos:Qual a mais apropriada unidade de decomposio de um programa ? Como uma linguagem de programao pode dar um melhor suporte composio de componentes independentes?

2.2. Linguagens de Programao Ghezzi Jazayeri Funcional Nas LPs procedurais, as unidades de decomposio so os procedimentos (procedures), ? que podem causar efeitos colaterais,nas estruturas globais que comunicam-se entre si Tipos abstratos de dados tentam modularizar um programa, pelo empacotamento de dados e de operaes, para limitar o escopo dos efeitos colaterais, nas unidades encapsuladas

2.2.3

?

A programao funcional baseia-se sem varivel nas funes matemticas, ? operando sobre valores e produzindo valores, sem qqr efeito colateral

2.2. Linguagens de Programao Funcional 1

2.2.4

Ghezzi Jazayeri Inicialmente, sero abordadas as principais diferenas da programao funcional, ilustradas pelos conceitos bsicos da programao imperativa Para salientar mais ainda essas diferenas, as funes matemticas sero comparadas com as funes das linguagens imperativas

2 em seguida vamos apresentar a linguagem de programao funcional: HASKELL

2.2. Linguagens de Programao Funcional

2.2.5

Ghezzi Jazayeri As linguagens de programao funcional primitivas, comeando por LISP, adotavam escopo e tipagem dinmicas Scheme um dialeto de LISP, que adotou escopo esttico na linguagem Mais tarde, linguagens funcionais, tais como ML, Haskell, adotaram no somente escopo esttico mas tambm tipagem forte Haskell puramente funcional, no tendo variveis nem comando de atribuio. Assim, no inclui recursos imperativos e no produz efeitos colaterais.

2.2. Linguagens de Programao Funcional

2.2.6

2.2.1 Caractersticas de Linguagens Imperativas Jazayeri GhezziAs linguagens de programao imperativa so caracterizadas por trs conceitos: variveis, atribuio e seqncia de execuo

O estado de um programa imperativo mantido em variveis de programa Essas variveis so associadas a alocaes de memria, que so caracterizadas por: um endereo (l-value) e um valor armazenado (r-value) O acesso ao valor de uma varivel pode ser APONTADOR direto via seu l-value ou indiretamente via o r-value de uma outra varivel

2.2. Linguagens de Programao Funcional

2.2.7

2.2.1 Caractersticas de Linguagens Imperativas Jazayeri GhezziAs linguagens de programao imperativa so caracterizadas por trs conceitos: variveis, atribuio e seqncia de execuo

O valor de uma varivel alterado na execuo de um comando de atribuio O comando de atribuio introduz uma ordem de dependncia no programa: o valor de uma varivel pode ser diferente antes e depois da execuo de um comando de atribuio ATRIBUIO e seqncia Os efeitos em um programa, ento, de execuo DEPENDEM DA ORDEM em que os comandos so escritos e executados

2.2. Linguagens de Programao Funcional

2.2.8

2.2.1 Caractersticas de Linguagens Imperativas Jazayeri GhezziAs linguagens de programao imperativa so caracterizadas por trs conceitos: variveis, atribuio e seqncia de execuo

Na matemtica, variveis so amarradas a valores e uma vez amarradas, no trocam de valores Assim, o valor de uma funo INDEPENDE dos conceitos da programao imperativa, como por exemplo, A ORDEM DA EXECUO DOS COMANDOS Uma funo matemtica define um mapeamento de um valor de domnio para um valor de faixa

2.2. Linguagens de Programao Funcional

2.2.9

2.2.1 Caractersticas de Linguagens Imperativas Jazayeri Ghezzi FUNO MATEMTICA um conjunto de pares ordenados que relaciona cada elemento no domnio com um nico correspondente elemento na faixa

{FUNO na PROGRAMAO IMPERATIVA descrita como algoritmo que especifica como computar os valores da faixa para um valor de domnio em uma

DETERMINADA SEQNCIA DE PASSOSLembrando que as linguagens de programao imperativa so caracterizadas por trs conceitos: variveis, atribuio e seqncia de execuo

2.2. Linguagens de Programao Funcional

2.2.1 Caractersticas de Linguagens Imperativas Jazayeri GhezziREPETIO (LOOP) uma outra caracterstica das linguagens imperativas, usada, freqentemente, para computar os valores desejados Os loops so usados, por exemplo, para: varrer uma seqncia de alocaes de memria (p/ex. arrays) acumular o valor de uma dada varivel Em contraste, em funes matemticas, os valores so computados pela aplicao de funo RECURSO usada no lugar de ITERAO COMPOSIO DE FUNO usada para construir funes mais poderosas

2.2.1 0

2.2. Linguagens de Programao Funcional

2.2.1 Caractersticas de Linguagens Imperativas Jazayeri Ghezzi Por causa das diferentes caractersticas As LINGUAGENS IMPERATIVAS so chamadas de BASEADAS EM ESTADO ou ORIENTADA A COMANDO As LINGUAGENS FUNCIONAIS so chamadas de BASEADAS EM VALORES ou APLICATIVAS

2.2.1 1

2.2. Linguagens de Programao Funcional

CONCEITO 2.2.1 2 2.2.1 Funes na Matemtica e na Programao Jazayeri Ghezzi Uma funo uma regra para mapeamento de membros de um conjunto domnio para um conjunto faixa Ex. funo quadrado poderia mapear elementos do conjunto inteiro p/conjunto natural A definio de uma funo constituda de duas partes: uma assinatura e uma regra de mapeamento A assinatura especifica o domnio e a faixa A regra de mapeamento especifica o valor da faixa associado a cada valor de domnioEX

Assinatura. quadrado: inteiro p natural quadrado(n) = n X n Regra de mapeamento.

2.2. Linguagens de Programao Funcional

DEFINIO 2.2.1 3 2.2.1 Funes na Matemtica e na Programao Jazayeri GhezziEX

Assinatura. quadrado: inteiro p natural quadrado(n) = n X n Regra de mapeamento.

Ateno: na literatura aparece o smbolo | para denotar definida como, mas aqui est sendo usado o smbolo = adotado em Haskell. Ento, encontra-se tambm:

quadrado: inteiro p natural quadrado (n)

Assinatura.

| n X n .Regra de mapeamento

2.2. Linguagens de Programao Funcional

DEFINIO 2.2.1 4 2.2.1 Funes na Matemtica e na Programao Jazayeri GhezziEX

Assinatura. quadrado: inteiro p natural quadrado(n) = n X n Regra de mapeamento.

funo nomeada quadrado, acima, definida como o mapeamento de elementos do conjunto inteiro p/conjunto natural smbolo

= em Haskel significa definida como

n um parmetro, que representa qualquer membro do conjunto do domnio nas definies de funo, por conveno, a assinatura omitida se domnio e faixa so implcitos no contexto

2.2. Linguagens de Programao Funcional

APLICAO 2.2.1 Funes na Matemtica e na Programao Jazayeri GhezziEX

2.2.15

Assinatura. quadrado: inteiro p natural quadrado(n) = n X n Regra de mapeamento.

Uma vez definida uma funo, ela pode ser aplicada a qualquer membro do conjunto domnio A aplicao produz (ou resulta, ou retorna) o elemento associado na faixa No momento da aplicao, um elemento particular do domnio especificado Esse elemento, chamado o argumento, substitui o argumento da definio

2.2. Linguagens de Programao Funcional

APLICAO 2.2.1 6 2.2.1 Funes na Matemtica e na Programao Jazayeri GhezziEX

Assinatura. quadrado: inteiro p natural quadrado(n) = n X n Regra de mapeamento.

A substituio puramente textual

? Se a definio contm aplicaes, elas so aplicadas na seqncia at ser alcanada uma expresso que possa ser avaliada para produzir o resultado da aplicao originalquadrado (2) produz o valor 4 de acordo com a sua definio

2.2. Linguagens de Programao Funcional

APLICAO 2.2.1 7 2.2.1 Funes na Matemtica e na Programao Jazayeri GhezziEX

Assinatura. quadrado: inteiro p natural quadrado(n) = n X n Regra de mapeamento.

O parmetro n uma varivel matemtica diferente de uma varivel de programa Na definio da funo, n representa qualquer membro do conjunto domnio

{?

Na aplicao da funo, dado um valor especfico, que nunca trocado Em contraste, a varivel de programa, no paradigma imperativo, pode assumir diferentes valores durante o curso da execuo de um programa

2.2. Linguagens de Programao Funcional

2.2.1 Funes na Matemtica e na Programao Jazayeri GhezziDE FUNES Novas funes podem ser criadas pela COMBINAO DE OUTRAS A forma mais comum de combinao de funes a COMPOSIO Se uma funo F definida como a composio de duas funes G e H, escrita como F a aplicao de F definida pela aplicao de H e ento a aplicao de G para chegar finalmente ao resultado

2.2.1 COMBINAO 8

=

G o H,

Ghezzi Jazayeri 2.2. Linguagens de Programao Funcional 2.2.1 Funes na Matemtica e naProgramao

2.2.1 9

Nas LPs convencionais, uma funo definida proceduralmente A regra de mapeamento de um valor do domnio para um valor de faixa determinada em termos de passos que necessitam ser executados em uma certa ordem especificada pela estrutura de controle Contraste entre convencionais e funcionais Por outro lado, as funes matemticas so DEFINIDAS APLICATIVAMENTE Muitas funes matemticas so definidas recursivamente, i.e, a definio da funo contm uma aplicao da prpria funo

2.2. Linguagens de Programao Funcional

RECURSO 2.2.2

0 2.2.1 Funes na Matemtica e na Programao Jazayeri Ghezzi Muitas funes matemticas so definidas recursivamente, i.e, a definio da funo contm uma aplicao da prpria funo

Por exemplo, a definio matemtica padro de fatori