A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

INE5363-Programação Funcional

Apresentações semelhantes


Apresentação em tema: "INE5363-Programação Funcional"— Transcrição da apresentação:

1 INE5363-Programação Funcional
Prof. João Bosco da Mota Alves 2001/1 - INE/CTC/UFSC Bacharelado em Ciência da Computação

2 Ementa Introdução O Paradígma de Programação Funcional
A linguagem LISP O dialeto XLISPWIN Exemplo de Uso de XLISPWIN Linguagem funcional moderna: CLEAN Cálculo Lâmbda (l - Calculus)

3 Material didático Notas de aula
OAKEY, S. Lisp para Micro. Rio de Janeiro, Editora Campus, 1986. FRIEDMAN, D.; FELLEISEN, M. The Little LISPer (Third Edition). NJ, Macmllan Publishing, 1989. GORDAN, G. J. Common LISP Hints (Adaptado para XLISPWIN ). Original Software CLEAN, STEELE, G. L. Common LISP: the Language. Digital Press, 1984.

4 Introdução Linguagens de programação
Visão geral Pontos de vista Implicações em eficiência/produtividade Linguagem de programação como forma de comunicação entre o usuário e o computador

5 Introdução Máquina Usuário Assembly Fortran

6 Paradígmas de Programação
Procedimental ou Procedural Assembly, Fortran, Pascal, ... Orientado por Objeto Smaltalk, C++, VisualAge, Java, Delphi, ... Programação em Lógica Prolog, Trilogy, Parlog, ... Funcional Lisp, Hugs, Clean, Haskel, ...

7 Independência de Plataformas
Não gerar código objeto direto Gerar código C padrão Compilar para máquina alvo Vantagem Código escrito uma única vez Desvantagem Trabalho adicional

8 Paradígma de Programação Funcional
Estuda-se paradígmas de programação comparando-se com o procedimental, pois Foi o primeiro paradígma É o mais difundido Há algo com o qual comparar-se Faremos assim

9 Paradígma de Programação Procedimental
Seqüência de comandos permite a transição de um estado da máquina a outro Estado da máquina Conjunto de valores que define a situação ou comportamento de um sistema Exemplo Estado1, (1, 2); estado2, (1, -4)

10 Paradígma de Programação Procedimental
Transição de estado int fact(int n) { int x = 1; while (n > 0) { x = x * n; n = n - 1; } return x; Um programa C

11 Paradígma de Programação Procedimental

12 Paradígma de Programação Procedimental
O conceito de estado está vinculado, implicitamente, ao paradígma de programação procedimental Não possuindo significado explícito nos demais paradígmas

13 Paradígma Funcional Um programa é simplesmente uma função, ou expressão, daí o nome Sua execução significa a avaliação dessa função Comparando com o procedimental, onde f é a função (programa)

14 Paradígma Funcional Exemplo
O mesmo problema do fatorial de n, n! Em linguagem funcional fatorial (n) = prod [1..n] Veja que não faz sentido algum o conceito de estado da máquina

15 Paradígma Funcional Sob essa visão
Não há estados Não há atribuições Não há seqüência de comandos Não há repetições Mas há recursão e funções de alta ordem

16 Paradígma Funcional Pode parecer impraticável uma linguagem sem
Variáveis Atribuições Seqüência de comandos Como visto aqui, isso não é verdade Pelo contrário: facilita em muitos casos

17 A linguagem LISP Principais idéias que sustentam o paradígma de programação funcional, datam da década de 30 Cálculo Lâmbda: um formalismo matemático criado por Alonzo Church A mais antiga implementação foi LISP, desenvolvida por McCarthy na segunda metade da década de 50

18 A linguagem LISP Vamos às suas principais características
Tipos de dados O átomo e a lista É com apenas esses dois tipos de dados que se constroem as expressões-S, as estruturas basilares de LISP

19 Exemplos de átomos atom carnaval
É um átomo, pois é um string de caracteres que começa com a letra a. Nota: Em algumas implementações, escreve-se (quote atom), ou 'atom. carnaval É um átomo, pois é um string de caracteres que começa com uma letra.

20 Exemplos de átomos 1500 150carnavais b
É um átomo, pois é um string de caracteres que começa com um dígito. 150carnavais b É um átomo, pois é um string de 1 caracter começando com letra ou dígito.

21 Exemplos de átomos *figueirense$ 6!
É um átomo, pois é um string de caracteres que começa com uma letra, um dígito ou um caracter especial que não é abre parênteses, (, ou fecha parênteses, ). 6!

22 Exemplos de listas (atom) (atom carnaval 1500) (atom carnaval) 1500
É uma lista: um átomo entre parênteses (atom carnaval 1500) É uma lista: coleção de átomos entre parênteses. (atom carnaval) 1500 Não é uma lista: duas expressões-S que não estão entre parênteses. A primeira é uma lista e a segunda é um átomo

23 Exemplos de listas ((atom carnaval) 1500)
É uma lista, pois as duas expressões-S estão entre parênteses. A primeira é uma lista e a segunda é um átomo Tente fazer alguns exercícios para fixar os conceitos de átomos e listas

24 Expressão-S (S-expresssion)
jbma É uma expressão-S, pois todo átomo é uma expressão-S (j b m a) É uma expressão-S, pois é toda lista é uma expressão-S ((j b m) a) É uma expressão-S, pois é uma lista

25 Expressão-S (o que seria do musica baiana se inexistisse eh oh eh oh)
É uma lista, pois é uma coleção de expressões-S entre parênteses ((j b m) a) Nessa lista há duas expressões-S. A lista (j b m) e o átomo a

26 Expressão-S ( ) É uma lista, pois contém zero expressões-S. Essa expressão-S especial é chamada de lista nula ou lista vazia, as vezes chamada, também, nil É um átomo, pois ( ) é ambos, uma lista e um átomo

27 Expressão-S ( ( ) ( ) ( ) ( ) )
É uma lista, pois é uma coleção de expressões-S entre parênteses Agora vejamos como se representa funções em LISP

28 Representação de funções
LISP Processamento de listas Representa funções através de listas O nome da função é sempre o primeiro elemento da lista Veja alguns exemplos de funções representadas em LISP

29 Funções em LISP f(x,y), na notação usual matemática
Nome da função, f, como o primeiro elemento e os demais elementos, x e y, representam os seus argumentos (nome-da-funcao argumento1 argumento2 ...)

30 Funções em LISP 3*7, usando-se a notação infixa
Em LISP, notação pré-fixa (* 3 7)

31 Funções em LISP A origem do nome LISP
LISt Processing (processamento de listas) Exemplos de execução LISP > ( ) ; operador adição 7 ; retorno da função > ( ) ; operador subtração 2 ; retorno da função > (car '(6 4)) ; função car 6 ; retorno da função > (cdr '(6 4)) ; função cdr (4) ; retorno da função

32 Funções em LISP LISP só pensa naquilo
Toda vez que você fornece uma lista, a executa, a menos que você o alerte para não o fazer Por exemplo, se você fornecer a lista (6 5 7) e a mandar executar, LISP irá retornar mensagem de erro 6 não é uma função Como alertá-lo, então?

33 Funções em LISP Em um dos exemplos acima, solicitou-se a execução de
> (car '(6 4)) Veja que a lista que é fornecida como argumento da função car é precedida pelo símbolo “ ’ ” Esse é o alerta: proibido avaliar Veja histórico sobre Expressão-S nas notas de aula

34 Função universal como interpretador LISP
Na Teoria da Computação, é comum investigar funções universais Exemplo, a máquina universal de Turing É uma máquina de Turing que pode simular qualquer outra máquina de Turing que voce possa descrever McCarthy fez exatamente isso com LISP

35 Função universal como interpretador LISP
Definiu uma função universal LISP Que poderia interpretar qualquer outra função LISP Em outras palavras Escreveu um interpretador LISP, em LISP Como LISP manipula apenas listas Escrever uma função universal iria requerer desenvolver-se uma forma de representar programas LISP como estruturas de listas

36 Função universal como interpretador LISP
Exemplo f(x+y; u*z) Pode ser representada na forma de lista (f (+ x y) (* u z)) Em Algol, esse artifício era chamado de Expressão-M (M-Expression) Aqui, M significava metalangue (metalinguagem)

37 Função universal como interpretador LISP
Em LISP, a expressão acima passou a ser chamada de Expressão-S (S-Expression) Em LISP, S siginificava simbolic language (linguagem simbólica) Nesse momento, um dos membros do grupo constatou que tinham em mãos, de fato, um interpretador

38 Função universal como interpretador LISP
Traduziram a função universal para Assembly e a linkaram com as sub-rotinas de manuseio de listas E esse foi o primeiro sistema LISP Isso requeria o uso de Expressão-S, considerado uma inconveniência temporária

39 Função universal como interpretador LISP
Tentaram uma melhor notação, mas nunca conseguiram completá-la, e continuaram a usar a Expressão-S Hoje, sabe-se, que essa representação é uma das principais vantagens de LISP LISP tornou-se a principal linguagem para IA, até os anos 70

40 O dialeto XLISPWIN Símbolos representam átomos
Se você usar letras, dígitos e hífens, você estará seguro de não errar Restrições Não use apenas dígitos (inteiro?) Não use um hífen inicial (inteiro negativo) Veja alguns exemplos em XLISPWIN

41 O dialeto XLISPWIN a foo bar baaz-quux-garply
São exemplos de átomos em XLISPWIN O caractere ; é para comentário Tudo, após o mesmo e até o final da linha, é considerado comentário É ignorado pelo interpretador

42 O dialeto XLISPWIN Exemplos de funções XLISPWIN
> (setq a 5) ; armazena um número, 5 ; como o valor de um símbolo, a 5 > a ; pega o valor, 5, de um símbolo, a

43 Funções XLISPWIN > (let ((a 6)) a) 6 > a 5 ; faz o valor de um
; símbolo, a ; temporariamente ; igual a 6 ; retorna 5, pois o ; let já foi interpretado

44 Funções XLISPWIN > (+ a 6) 11 > b
; Usa o valor de um símbolo como ; um argumento para a função ; Tenta pegar o valor de um símbolo sem valor error: unbound variable - b if continued: try evaluating symbol again Note a mensagem de erro: algo deu errado

45 Símbolos especiais O símbolo t (de true, verdadeiro)
O símbolo nil (em LISP, utilizado para representar o valor lógico falso) Também, como visto, pode representar a lista vazia > (if t 5 6) 5

46 Símbolos especiais > (if nil 5 6) 6 > (if 4 5 6) 5
A função if é aplicada a 3 argumentos Quando o 1o é nil, retorna o 3o Quando o 1o é t (ou qq. outro, retorna o 3o Retorna o argumento ou sua avaliação

47 Símbolos especiais Símbolos como t e nil são chamados de auto-avaliantes, porque eles mesmos se avaliam Há toda uma classe de símbolos auto-avaliantes denominados keywords Qualquer símbolo cujo nome começa com dois pontos, :, é uma keyword

48 Símbolos especiais > :this-is-a-keyword :THIS-IS-A-KEYWORD
> :so-is-this :SO-IS-THIS > :me-too :ME-TOO

49 Números (átomos numéricos)
XLISPWIN suporta 4 tipos de números Inteiro Real (com ponto decimal e, também, na notação científica) Racional Complexo


Carregar ppt "INE5363-Programação Funcional"

Apresentações semelhantes


Anúncios Google