Vous êtes sur la page 1sur 22

Linguagens de Programação

Funcionais

1
FACENSA - Paradigmas de Linguagem de Programação - Prof. Daniel Wildt (dwildt@via-rs.net)
Agenda
• Introdução
• Exemplos de linguagens deste paradigma
• Paradigma Funcional x Imperativo
(Procedural)
• Concluindo

2
FACENSA - Paradigmas de Linguagem de Programação - Prof. Daniel Wildt (dwildt@via-rs.net)
Introdução
• Base: Aplicação de funções em vez de
variáveis e atribuições
• Busca imitar as funções matemáticas no
maior grau possível.
• Não utilizam variáveis nem instruções de
atribuição (forma pura) e sim expressões
condicionais, recursão e formas funcionais
para construir funções mais simplexas.

3
FACENSA - Paradigmas de Linguagem de Programação - Prof. Daniel Wildt (dwildt@via-rs.net)
Introdução
• Função: Regra para mapear elementos de
um conjunto (conjunto domínio) em outro
conjunto (conjunto imagem /
contradomínio)
– cubo(x) ≡ x * x * x, em que x é um número
real
• O símbolo “≡”, indica “definido como”.
• O parâmetro x pode representar qualquer
elemento do conjunto domínio.

4
FACENSA - Paradigmas de Linguagem de Programação - Prof. Daniel Wildt (dwildt@via-rs.net)
Introdução
• Forma funcional ou função de ordem
superior: toma funções como parâmetros,
produz uma função como seu resultado,
ou ambos.
• Formas Funcionais:
– Composição de funções
– Construção
– Apply-To-All

5
FACENSA - Paradigmas de Linguagem de Programação - Prof. Daniel Wildt (dwildt@via-rs.net)
Introdução
• Formas Funcionais:
– Composição de funções, onde uma função
mais complexa é composta de funções mais
simples.
• h ≡ f °g (indica que h é função composta de f e g)
• f(x) ≡ x + 2
• g(x) ≡ 3 * x
• h(x) ≡ f ( g (x))), ou h (x) ≡ (3 * x) + 2

6
FACENSA - Paradigmas de Linguagem de Programação - Prof. Daniel Wildt (dwildt@via-rs.net)
Introdução
• Formas Funcionais:
– Construção, forma funcional que toma lista de
funções como parâmetros e aplica esta a um
determinado argumento.
• g(x) ≡ x * x
• h(x) ≡ 2 * x
• i(x) ≡ x / 2
• [g,h,i](4) produz (16,8,2)

7
FACENSA - Paradigmas de Linguagem de Programação - Prof. Daniel Wildt (dwildt@via-rs.net)
Introdução
• Formas Funcionais:
– Apply-to-all (aplica-se a tudo) toma lista de
argumentos e aplica em uma determinada
função. Utiliza o símbolo α para representar a
operação
– α (g, (2,3,4)) produz (4, 9, 16)

8
FACENSA - Paradigmas de Linguagem de Programação - Prof. Daniel Wildt (dwildt@via-rs.net)
Introdução
• Fundamentos
– Não utiliza variáveis nem atribuições.
Programação não se preocupa com questões
como alocação de memória para as variáveis.
– Construções iterativas não são possíveis, a
repetição é feita através de recursão.
– Programas são definições de funções e de
especificações de aplicações destas. As
execuções consistem em avaliá-las.

9
FACENSA - Paradigmas de Linguagem de Programação - Prof. Daniel Wildt (dwildt@via-rs.net)
Introdução
• Formadas por componentes como:
– Conjunto de funções primitivas
– Conjunto de formas funcionais (para criação
de novas funções)
– Operação de aplicação de funções
– Estrutura ou estruturas para representar
dados

10
FACENSA - Paradigmas de Linguagem de Programação - Prof. Daniel Wildt (dwildt@via-rs.net)
Introdução
• Normalmente implementadas com
interpretadores, também pode ser
compiladas

11
FACENSA - Paradigmas de Linguagem de Programação - Prof. Daniel Wildt (dwildt@via-rs.net)
Exemplos de linguagens
deste paradigma
• LISP: Projetada por John McCarthy
(1958/1959). Puramente funcional. Surgiu
no MIT. Primeira linguagem funcional.
– A primeira versão do LISP surgiu da
necessidade de uma linguagem para
processamento de listas.

12
FACENSA - Paradigmas de Linguagem de Programação - Prof. Daniel Wildt (dwildt@via-rs.net)
Exemplos de linguagens
deste paradigma
• LISP
– Funções como:
• QUOTE (evita a avaliação de um parâmetro)
• CAR (retorna o primeiro elemento de uma lista)
• CRD (Retorna o restante da lista depois que o seu
CAR é removido).

13
FACENSA - Paradigmas de Linguagem de Programação - Prof. Daniel Wildt (dwildt@via-rs.net)
Exemplos de linguagens
deste paradigma
• Scheme: Dialeto do LISP, surgiu no MIT
na década de 70.
– Interpretador scheme é um laço infinito de
leitura-avaliação-escrita.
– Outras funções:
• CONS e LIST (construtores de lista)
• EQ?, NULL? e LIST?, avaliam e retornam valores
booleanos (#T e #F).

14
FACENSA - Paradigmas de Linguagem de Programação - Prof. Daniel Wildt (dwildt@via-rs.net)
Exemplos de linguagens
deste paradigma
• Scheme: Dialeto do LISP, surgiu no MIT
na década de 70.
– Outras funções:
• Para dados numéricos: =, <, >, <>, <=, >=,
EVEN?, ODD?, ZERO?,
• DISPLAY (para saída)
• DEFINE (define novas funções).

15
FACENSA - Paradigmas de Linguagem de Programação - Prof. Daniel Wildt (dwildt@via-rs.net)
Exemplos de linguagens
deste paradigma
• Outras linguagens:
– APL: Muitos aspectos funcionais
– FP: semelhante a APL
– Common LISP: junção de recursos de LISP e
Scheme
• Permite o uso da função PROG, para sequenciar
instruções, como em uma linguagem imperativa
• Possui rótulos e funções GO e RETURN para
controle de iteração.

16
FACENSA - Paradigmas de Linguagem de Programação - Prof. Daniel Wildt (dwildt@via-rs.net)
Exemplos de linguagens
deste paradigma
• Outras linguagens:
– ML, de 1990, mais parecida com Pascal do
que LISP.
• E hoje?
– LISP é utilizado para escrever por exemplo o
editor de textos EMACS (uso de LISP fora do
mundo da Inteligência Artificial).

17
FACENSA - Paradigmas de Linguagem de Programação - Prof. Daniel Wildt (dwildt@via-rs.net)
Paradigma Funcional x
Imperativo (Procedural)
• Com exceção da primeira versão do LISP,
todos dialetos derivados do LISP possuem
características da programação
imperativa.
• Na programação funcional a regra é
definir funções em função de outras
funções. Na definição procedural, as
regras são definidas por passos a serem
executados.

18
FACENSA - Paradigmas de Linguagem de Programação - Prof. Daniel Wildt (dwildt@via-rs.net)
Paradigma Funcional x
Imperativo (Procedural)
• 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
(buscando então paralelismo).

19
FACENSA - Paradigmas de Linguagem de Programação - Prof. Daniel Wildt (dwildt@via-rs.net)
Paradigma Funcional x
Imperativo (Procedural)
• 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.

20
FACENSA - Paradigmas de Linguagem de Programação - Prof. Daniel Wildt (dwildt@via-rs.net)
Concluindo
• Links de apoio:
– http://www.lisp.org/
– http://clisp.cons.org/
• Referências:
– [SEB00] SEBESTA, R. Conceitos de
Linguagens de Programação . 4. ed.
Bookman, 2000.

21
FACENSA - Paradigmas de Linguagem de Programação - Prof. Daniel Wildt (dwildt@via-rs.net)
Dúvidas?

http://sites.facensa.com.br/pessoais/daniel/

22
FACENSA - Paradigmas de Linguagem de Programação - Prof. Daniel Wildt (dwildt@via-rs.net)

Vous aimerez peut-être aussi