Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando...
Transcript of Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando...
![Page 1: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/1.jpg)
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.
![Page 2: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/2.jpg)
Roteiro Linguagens Imperativas
Linguagens Funcionais
Atividade
![Page 3: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/3.jpg)
Linguagens Imperativas
![Page 4: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/4.jpg)
Roteiro 1- Introdução
Paradigmas de Programação
2- Paradigma Imperativo
Modelo Computacional • Arquitetura de Von Neumann
Características Centrais
3- Efeitos Colaterais
4- Exemplos Linguagens Imperativas
5- Linguagens Imperativas não Estruturadas
6- Linguagens Imperativas Estruturada
4
![Page 5: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/5.jpg)
Introdução Na Ciência da Computação, programação imperativa é
um paradigma de programação que descreve a computação como ações, enunciados ou comandos que mudam o estado(variáveis) de um programa.
5
![Page 6: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/6.jpg)
Paradigmas de Programação Fornece e determina a visão que o
programador possui sobre a estruturação e execução do programa.
Assim como diferentes grupos em engenharia de software propõem diferentes metodologias, diferentes linguagens de programação propõem diferentes paradigmas de programação.
6
![Page 7: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/7.jpg)
Paradigmas de Programação
Um paradigma específico: • SmallTalk e Java- Orientações a objetos • Haskell- Funcional
Múltiplos paradigmas: • LISP, Perl, Python, C++, Oz
7
![Page 8: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/8.jpg)
Paradigmas de programação Os paradigmas de programação são
muitas vezes diferenciados pelas técnicas de programação que proíbem ou permitem. Por exemplo, a programação estruturada não permite o uso de goto.
O relacionamento entre paradigmas de programação e linguagens de programação pode ser complexo.
8
![Page 9: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/9.jpg)
Quanto ao paradigma
Se dividem em dois grandes grupos:
• Imperativo
• Declarativo
9
![Page 10: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/10.jpg)
Paradigma Imperativo Os paradigmas imperativos são aqueles
que facilitam a computação por meio de mudanças de estado. Se dividem em:
• O paradigma procedural: Fortran e o Basic.
• O paradigma de estrutura de blocos: Algol 60, Pascal e C.
• O paradigma de orientação a objetos: C++, Java, Python e Ruby.
• O paradigma da computação distribuída: Ada.
10
![Page 11: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/11.jpg)
Modelo Computacional A arquitetura dos computadores exerceu um efeito
crucial sobre o projeto das linguagens de programação.
Arquitetura de Von Neumann. Se caracteriza pela possibilidade de uma máquina digital armazenar seus programas no mesmo espaço de memória que os dados, podendo assim manipular tais programas.
11
![Page 12: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/12.jpg)
Modelo Computacional Arquitetura de Von Neumann
12
![Page 13: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/13.jpg)
Modelo Computacional O modelo imperativo de programação
baseia-se no modo de funcionamento do computador.
O paradigma imperativo é predominante nas LPs, pois tais linguagens são mais fáceis de traduzir para uma forma adequada para execução na máquina.
13
![Page 14: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/14.jpg)
Modelo Computacional Linguagens imperativas são caracterizadas por três
conceitos: variáveis, atribuições e sequências.
O estado de um programa imperativo é mantido em variáveis de programa que são associados com localizações de memória que correspondem a um endereço e um valor de armazenamento.
O valor da variável pode ser acessado direta e indiretamente, e pode ser alterado através de um comando de atribuição. O comando de atribuição introduz uma dependência de ordem no programa: o valor de uma variável é diferente antes e depois de um comando de atribuição.
14
![Page 15: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/15.jpg)
Modelo Computacional Já as funções de linguagem de programação
imperativas são descritas como algoritmos que especificam como processar um intervalo de valores, a partir de um valor de domínio, com uma série de passos prescritos.
A repetição, ou laço, é usada extensivamente para processar os valores desejados. Laços são usados para varrer uma sequência de localizações de memória tal como vetores, ou para acumular um valor em uma variável específica.
15
![Page 16: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/16.jpg)
Características centrais As características centrais das linguagens
imperativas são:
• as variáveis, que modelam as células de memória;
• comandos de atribuição, que são baseados nas operações de transferência dos dados e instruções;
• a execução sequencial de instruções;
• e a forma iterativa de repetição, que é o método mais eficiente desta arquitetura.
16
![Page 17: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/17.jpg)
Características Centrais Ex.: O valor da variável é modificado através de
atribuições. Por exemplo, em Pascal: X := 5; O termo à esquerda do operador de atribuição
(:=) é a variável cujo valor está sendo modificado e à direita está o novo valor. X tem valores diferentes antes e depois da atribuição. Portanto o significado (efeito) de um programa depende da ordem em que as atribuições são escritas e executadas.
17
![Page 18: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/18.jpg)
Características Centrais Uma última característica importante é que
a repetição (laços) é utilizada extensivamente para computar valores desejados. Laços são usados para varrer um vetor ou acumular valores numa variável.
Por causa dessas características, as linguagens imperativas têm sido chamadas de orientadas a estado ou orientadas à atribuição.
18
![Page 19: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/19.jpg)
Efeitos Colaterais Vantagens
• Eficiência (embute o modelo de Von Neumann)
• Mais fácil de traduzir para a linguagem de máquina
• Paradigma dominante e bem estabelecido
• Modelagem “Natural” de aplicações do mundo real
• Também é muito flexível
Desvantagens
• Descrições demasiadamente operacionais
• Focaliza o “como” e não o “quê”
• Relacionamento indireto com a E/S (indução a erros/estados) 19
![Page 20: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/20.jpg)
Exemplos de Linguagens Imperativas
Alguns exemplos de linguagens de programação que baseiam-se no modelo imperativo:
• Ada
• Algol
• Basic
• C
• PHP
• Java
• Cobol
• Fortran
• Pascal
• Python
• Lua
• Mathematica
20
![Page 21: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/21.jpg)
Linguagens Imperativas Não Estruturadas
São linguagens caracterizadas pela utilização da expressão goto.
Necessária para determinar a repetição e a seleção de execução de instruções.
Uso de goto geralmente leva ao que chamam na literatura de código spaguetti.
21
![Page 22: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/22.jpg)
Linguagens Imperativas Não Estruturadas
Exemplo de código com o uso de instrução goto, baseado na sintaxe do Pascal: read(x); 2: if x = 0 then goto 8; writeln(x); 4: read(next); if next = x then goto 4; x := next; goto 2;
8: ...;
22
![Page 23: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/23.jpg)
Linguagens Imperativas Não Estruturadas
Fortran, Assembly e Basic são algumas das linguagens imperativas que possuem o conceito de goto.
23
![Page 24: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/24.jpg)
Linguagens Imperativas Estruturadas
Linguagens estruturadas surgiram com o objetivo de facilitar a leitura e acompanhamento da execução de algoritmos.
Normalmente linguagens estruturadas não fazem uso de comando goto.
Instruções são agrupadas em blocos, os quais podem ser considerados como unidades de programa, abstraindo-se das suas estruturas internas.
24
![Page 25: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/25.jpg)
Linguagens Imperativas Estruturadas
Blocos de instruções podem ser selecionados para execução através de declarações de seleção como if...else, ou repetidamente executados através de declarações de repetição como while.
Procedurais e Modulares.
25
![Page 26: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/26.jpg)
Linguagens Imperativas Estruturadas
Exemplo de código estruturado, baseado na sintaxe do Pascal, correspondente ao mesmo exemplo da seção anterior: read(x); while x <> 0 do begin writeln(x); repeat read(next); until next <> x; x := next; end;
26
![Page 27: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/27.jpg)
Linguagens Funcionais
![Page 28: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/28.jpg)
Linguagens Funcionais Introdução
Algumas características
Antecedentes históricos
(Lambda) λ-Cálculo
Operações básicas λ
Estratégias de redução
Formas funcionais
Trabalhando com linguagens funcionais
Exemplos
Vantages e Desvantagens
![Page 29: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/29.jpg)
Introdução O projeto de linguagens funcionais é baseado em
funções matemáticas
Programação com alto nível de abstração
Forte fundamentação teórica, o que permite mais facilmente provas de propriedades sobre os programas
Linguagens funcionais, especialmente as puramente funcionais, tem sido mais usadas academicamente que no desenvolvimento comercial de software
Importantes influências na programação funcional foram o cálculo lambda, as l inguagens de p r o g r a m a ç ã o A P L e L i s p , e m a i s recentemente ML, Haskell e F#
![Page 30: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/30.jpg)
Algumas Características As expressões são a representação exata da
informação;
As expressões podem ser associadas a nomes;
Todos os nomes que de uma expressão tem um valor único e imutável;
Os valores dependem dos valores das sub-expressões que as constituem;
Não permite efeito colateral em funções, a linguagem oferece transparência referencial.
![Page 31: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/31.jpg)
Antecedentes Históricos Década de 1930:
Alonzo Church desenvolve o cálculo lambda, uma teoria de funções simples, mas poderosa
![Page 32: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/32.jpg)
Antecedentes Históricos Década de 1950:
John McCarthy desenvolve Lisp, a primeira linguagem funcional,com algumas influências do cálculo lambda, mas mantendo as atribuições de variáveis.
![Page 33: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/33.jpg)
Antecedentes Históricos Década de 1960:
Peter Landin desenvolve ISWIM, a primeira linguagem funcional pura, baseada fortemente no cálculo lambda, sem atribuições.
![Page 34: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/34.jpg)
Antecedentes Históricos Década de 1970: John Backus desenvolve
FP, uma linguagem funcional que enfatiza funções de ordem superior e raciocínio sobre programas.
Robin Milner e outros desenvolvem ML, a primeira linguagem funcional moderna, que introduziu a inferência de tipos e tipos polimórficos.
![Page 35: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/35.jpg)
Antecedentes Históricos 1987: Um comitê internacional de pesquisadores inicia
o desenvolvimento de Haskell, uma linguagem funcional lazy padrão.
![Page 36: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/36.jpg)
Antecedentes Históricos 2003: O comitê publica o relatório Haskell 98, a
definição de uma versão estável da linguagem Haskell.
2009: O comitê publica o relatório Haskell 2010, uma revisão da definição da linguagem Haskell.
![Page 37: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/37.jpg)
(Lambda) λ-Cálculo O cálculo lambda pode ser considerado a primeira
linguagem de programação funcional, embora nunca tenha sido projetada para ser realmente executada em um computador
Um programa funcional e composto por uma única expressão
Essa expressão deve descrever detalhadamente uma função e um elemento do domínio
A redução de um programa consiste em substituir uma parte da expressao original, obedecendo a certas regras de reescrita;
![Page 38: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/38.jpg)
Operações Básicas λ Expressões lambda são aplicadas aos parâmetros
colocando os parâmetros após a expressão(λ(x) x * x * x)(2),que é avaliado como sendo 8.
Outro exemplo: seja F a expressão X + 5, sendo X uma variável;
Essa expressão é indeterminada, no sentido que a variável X está livre para assumir qualquer valor arbitrário;
![Page 39: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/39.jpg)
Operações Básicas λ Substituição:
[ X ← 4 ] resulta na expressão 4 + 5; Abstração:
A abstração λX.F, ou seja, λX.(X + 5), denota a função matemática que, para cada valor de X, associa o valor X + 5;
Nessa expressão, a variável X não está mais livre para assumir um valor arbitrário;
Aplicação: Um sistema de reduções deve permitir que se produza a
sequencia de expressões λX.(X + 5) 4 => 4 + 5 => 9;
![Page 40: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/40.jpg)
Estratégias de redução As propriedades de confluência e terminação garantem que
qualquer sequencia de reduções deve levar ao mesmo resultado final;
Diferentes estratégias para organizar essas sequencias, entretanto, podem levar a sequencias menores para λ-termos específicos;
Duas estratégias fundamentais: De dentro para fora (a priori);
Do inglês Eager (gananciosa); De fora para dentro (sob demanda);
Do inglês Lazy (sossegada);
![Page 41: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/41.jpg)
Estratégias de redução De fora pra dentro(a priori)
![Page 42: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/42.jpg)
Estratégias de redução De fora para dentro (sob demanda)
![Page 43: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/43.jpg)
Estratégias de redução Características:
De dentro para fora (a priori): Implementação mais simples; Pode ocorrer de tentativas infinitas de
reduções; Interpretadores e compiladores mais
compactos; De fora para dentro (sob demanda):
Resultados intermediários; Função, durante a redução,
computacionalmente difícil ou demorada;
![Page 44: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/44.jpg)
Trabalhando com programação funcional
Uma caracteristica muito importante da programação funcional é a construção de definições. Uma lista de definições chama-se script. Exemplo de script:
square x = x * x
somaEmult x y = 3 * (x + y)
No script acima duas funções, square e somaEmult foram definidas. A função square toma um valor x e o multiplica por ele mesmo. A função somaEmult devolve a soma de seus argumentos multiplicada por 3. Nota-se que as funções foram definidas através de equações e que uma definição pode ser considerada como uma definição lógica de como a função se comporta. Em outras palavras, uma definição funcional pode ser vista como uma especificação do problema.
![Page 45: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/45.jpg)
Trabalhando com programação funcional
Tendo criado scripts pode-se usá-los em uma avaliação no computador.
Exemplos:
> square (2 + 3)
25
> somaEmult 1 2
9
> square (somaEmult 2 4)
324
O objetivo de uma definição é ligar um nome a um valor. No script anterior, por exemplo, o nome square é associado a uma função que eleva um valor ao quadrado.
![Page 46: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/46.jpg)
Linguagens imperativas x Linguagens funcionais
Linguagem Imperativas
Execução eficiente
Semântica Complexa
Sintaxe complexa
Concorrência é formulada pelo programador
Na programação imperativa o programador deve fazer uma divisão estática do programa em suas partes concorrentes, e escrever estas partes como novas tarefas.
Entender programas concorrentes em linguagens imperativas é muito mais difícil.
![Page 47: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/47.jpg)
Linguagens imperativas x Linguagens funcionais
Linguagens Funcionais
Semântica simples
Sintaxe simples
Execução ineficiente
Programas podem ser feitos concorrentes de maneira automática
A recursão é a forma das linguagens funcionais para representar iterações. A recursão não é característica de algumas linguagens imperativas.
Programas funcionais podem ser convertidos em grafos e então executados por um processo de redução de grafos
• Na programação funcional a regra é definir funções em função deoutras funções. Na definição procedural, as regras são definidas por passos a serem executados.
![Page 48: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/48.jpg)
Vantagens – Linguagens Funcionais
Um alto nível de abstração, especialmente quando as funções são utilizadas, suprimindo muitos detalhes da programação e minimizando a probabilidade da ocorrência de muitas classes de erros.
A não dependência das operações de atribuição permite aos programas avaliações nas mais diferentes ordens. Esta característica de avaliação independente da ordem torna as linguagens funcionais as mais indicadas para a programação de computadores massissamente paralelos.
A ausência de operações de atribuição torna os programas funcionais muito mais simples para provas e análises matemáticas do que os programas procedurais.
![Page 49: Universidade Estadual de Santa Cruzrogerio/material_auxiliar/CLP20131_linguagens... · Trabalhando com programação funcional Uma caracteristica muito importante da programação](https://reader034.fdocuments.net/reader034/viewer/2022050508/5f99701fd7ef41611275bf7e/html5/thumbnails/49.jpg)
Desvantagens – Linguagens Funcionais
Menor eficiência.
Problemas que envolvam muitas variáveis (ex. contas de banco) ou muitas atividades seqüenciais são muitas vezes mais fáceis de se trabalhar com programas procedurais ou programas orientados a objeto.