Introdução à Programação Funcional

Documentos relacionados
Introdução à Programação Funcional. Conteúdo

Programação Funcional. Programação Funcional LISP. Paradigma de programação baseado em Funções Matemáticas

Common-Lisp (introdutório).

LISP - Introdução. Existem vários dialectos de LISP: COMMON LISP (o mais sofisticado e mais utilizado) Outros: MAC LISP, INTERLISP, XLISP

Referências bibliograficas: * Paul Graham, Ansi Common Lisp, Prentice Hall, Livro com descrição da linguagem Common-Lisp.

Introdução à Programação Funcional

Inteligência Artificial

Exercícios da cadeira de Inteligência Artificial. Helena Sofia Pinto João Cachopo Daniel Gonçalves Carlos Lopes António Inês Lynce Pedro Matos

Exemplo: ; ver exemplo de aplicação abaixo com mapcar. ; retorna uma lista formada pelos elementos indicados. ; retorna o número de elementos na lista

Cadeira de Procura e Planeamento

Algoritmo de Dijkstra em LISP

Resolução de 8-Puzzle com A* em LISP

Algoritmos e Estrutura de Dados Aula 02 Listas em Python

Lista de Exercícios 4

para facilitar o trabalho com listas listas Cell model Lista é representada através de uma lista de células

Abstração de dados. Pedro Kröger. 5 de outubro de Um índice bibliográco poderia ser armazenado dessa maneira:

3.1 - Funções para manipular dados de entrada e saída padrão

Programação de Computadores

Inteligência Artificial

Inteligência Artificial Alameda e Taguspark

Algoritmos de Ordenação em LISP

Conceitos de Linguagem de Programação - 2

Listas em Haskell. Listas. Linguagem Haskell. Maria Adriana Vidigal de Lima. Faculdade de Computação - UFU. Setembro

Laços de repetição for, while, do-while

Python: Listas. Claudio Esperança

Processamento da Informação Teoria. Coleções: Listas

Programação Funcional

Minicurso de JavaScript PET Sistemas de Informação Segundo Dia Anthony Tailer. Clecio dos Santos. Rhauani Fazul.

Programação imperativa

Fundamentos de Programação

Estruturas de Dados em Python

Programação Orientada a Objetos. Programação Funcional

Laboratório de Programação A Exercícios sobre vetores e matrizes

Computação 1 - Python Aula 10 - Teórica: Estrutura de Dados - Dicionário. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 18

Linguagem de programação Strings

Listas generalizadas. SCC-202 Algoritmos e Estruturas de Dados I

CFAC: AutoLISP (II) - Cálculos, Variáveis e Listas

Funções Geométricas, de Strings, de Listas e de Manipulação de Arquivos

AutoLISP - II Cálculos, Variáveis e Listas. João Manuel R. S. Tavares Joaquim Oliveira Fonseca

24/09/2014. Prof. André Backes

Programação Dicas e Outras Coisas

AutoLISP -II Cálculos, Variáveis e Listas

;(define conta-folhas ; (lambda ( ) ; (cond ; ( ( ) ) ; ( (and ) ) ; ( else ; ) ) ))

AutoLISP -I Introdução

Exercícios de Programação e Computação para Arquitectura. António Menezes Leitão

CFAC: AutoLISP (I) - Introdução

USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS. Bruno Maffeo Departamento de Informática PUC-Rio

Computação I - Python Aula 1 - Teórica: Manipulação de Strings, Tuplas e Listas

AutoLISP - I Introdução. João Manuel R. S. Tavares Joaquim Oliveira Fonseca

Linguagens de Programação Aula 14

Fundamentos de Programação

Algoritmo e Programação Matemática LAÇOS E LISTAS

Exercícios da cadeira de Introdução à Programação

Compiladores - Análise Léxica

Introdução à Programação de Computadores para Biologia Expressões Regulares "regex" PROBLEMA (11)

AutoLISP - VI Conjuntos de seleção

Listas, conjuntos e dicionários

Manipulação básica de dados no PDI

Fundamentos de Programação

Fundamentos de Programação

Lista de Exercícios de Algoritmos - 04 Para cada um dos exercícios abaixo, faça um programa (em laboratório) que teste a função.

Linguagem de Programação C

Programação e Computação para Arquitectura 2010/2011

Computação 1 - Python Aula 6 - Teórica: Listas 1/ 28

A sintaxe básica para definir uma função é: function nome_da_função([arg1, arg2, arg3]) { Comandos;... ; [return <valor de retorno>]; }

Programação: Vetores

AULA 2: INTRODUÇÃO A PYTHON. Luís Feliphe Silva Costa

AutoLISP -VII Funções Geométricas, de Strings, de Listas e de Manipulação de Arquivos

2. Diga qual é a diferença entre tipos de informação elementares e tipos de informação estruturados.

Sets. Declaração: var y : Set[Int] = Set() O tipo do conjunto não é obrigatório, podendo usar a inferência: var x = Set(1,3,5,7)

Aula 19 Array. Desenvolvimento Web I Prof. Filipe Arantes Fernandes

Estruturas de dados para listas arrays e listas ligadas

Conjuntos de selecção

Jarley Nóbrega

FUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara

Funções. Introdução à Computação para a Engenharia Ambiental

Estruturas de dados funcionais

IO.println(a+" * "+b+" = "+produto); } }

Folha 3 - Análise léxica

MAC2166 Introdução à Computação para Engenharia Escola Politécnica Primeira Prova 05 de abril de 2010

imprimir seus quadrados.

Comandos de entrada. e saída. Comandos de entrada. Comandos de entrada. Comandos de entrada. Comandos de entrada. Comandos de entrada.

Faculdade Anglo-Americano Curso de Ciência da Computação Linguagem de Programação. Lista de Exercícios 1

Laboratório 3 Comandos de repetição while, do-while e for

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO MARANHÃO - CAMPUS CAXIAS. Aluno (s): 01 ATIVIDADE. Revisão de Conteúdo

3. Linguagem de Programação C

Técnicas de Programação

Curso Profissional de Gestão e Programação de Sistemas Informáticos. Programação e Sistemas de Informação. Módulo 4 Strings. Prof. Sandra Pais Soares

MC336 - Paradigmas de programação Lisp

Programação Estruturada Prof. Rodrigo Hausen VAMOS USAR O LINUX. SE TIVER ENTRADO NO WINDOWS, REINICIE O COMPUTADOR.

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA)

Listas e Tuplas. Vanessa Braganholo

Manipulação de Strings. Vanessa Braganholo

Linguagem Haskell. Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação. Tiago Carneiro 19 Agosto 2013

Manipulação de Strings

Programação Estruturada Prof. Rodrigo Hausen Condicionais e Laços

SCC0124 Introdução à Programação para Engenharias

Aula de hoje. Listas. Sequências especiais. Introdução. Listas. Sequências. SCC Introdução à Programação para Engenharias

Introdução à linguagem Perl

Transcrição:

Introdução à Programação Funcional PPGIA - PUCPR Prof. Fabrício Enembreck Conteúdo Introdução ao Cálculo Lambda e à Programação Funcional Introdução ao LISP e ao Allegro Common Lisp Funções Lambda e binding Funções de mapeamento Listas e funções recursivas Grafos em LISP

Função Lambda Uma função lambda é uma função sem nome Normalmente uma função lambda está associada com uma função de mapeamento (defun funcao (lista) (if (> (length lista) 0) (mapcar #'(lambda (elem) (if (listp elem) elem)) lista) (progn (print "Lista vazia") função de mapeamento nil) ) ) função lambda 3 Objetivo Funções de Mapeamento Simplificar o processamento de cada elemento de uma lista Estrutura de chamada (funcao-mapeamento <função a executar> <lista>) Função Lambda ou nome de uma outra função Lista de elementos a ser processada 4

Funções de Mapeamento (cont.) (mapcar <f> <L>) Retorna uma lista com o mesmo tamanho de L, onde cada elemento corresponde ao resultado da aplicação da função f sobre o respectivo elemento de L Ex.:?> (mapcar # length ((a b) (a b c) (a))) ( 3 ) 5 Funções de Mapeamento (cont.) (mapc <f> <L>) Como mapcar mas o valor de retorno é L. Utilizada normalmente para formatar saída no vídeo. Ex.:?> (mapc # (lambda (x) (print (length x))) ((a b) (a b c) (a))) 3 ((A B) (A B C) (A)) 6 3

Funções de Mapeamento (cont.) (maplist <f> <L>) Aplica a função f n vezes (n é o tamalho de L ) primeiro sobre a lista inteira, depois sobre o nth cdr de L. Retorna o valor da aplicação da função sobre os elementos de L. Ex.:?> (maplist #'(lambda (x) (print x) (print (length x))) '(a b c)) (A B C) 3 (B C) (C) (3 ) 7 Funções de Mapeamento (cont.) (mapl <f> <L>) Mesmo que mapl, mas o retorno é L. Ex.:?> (mapl #'(lambda (x) (print x) (print (length x))) '(a b c)) (A B C) 3 (B C) (C) (A B C) 8 4

Macros Uma macro serve para construção dinâmica de funções Diferenças entre macros e funções: Em macros os parâmetros não são avaliados na chamada Uma macro é avaliada duas vezes: a primeira para reconstruir o corpo da macro e a segunda para avaliar o corpo construído da macro Uma macro possui apenas um comando no nível zero 9 Macros (cont.) Exemplo de criação de uma macro (defmacro meu-while (teste corpo) (list 'loop (list 'unless teste '(return nil)) corpo)) MEU-WHILE?> (setq n 0)?> (meu-while (< n 3) (progn (print n) (incf n))) 0 NIL 0 5

Macros (cont.) Exemplo de avaliação da macro meuwhile (defmacro meu-while (teste corpo) (list 'loop (list 'unless teste '(return nil)) corpo))?> (meu-while (< n 3) (progn (print n) (incf n))) (LOOP º AVALIAÇÃO (UNLESS (< N 3) (RETURN NIL)) (PROGN (PRINT N) (INCF N))) º AVALIAÇÃO Resultado Macros (cont.) Verificando a expansão de uma macro (ª avaliação)?> (macroexpand '(meu-while (< n 3) (progn (print n) (incf n)))) T (BLOCK NIL (TAGBODY #:G5 (PROGN (UNLESS (< N 3) (RETURN NIL)) (PROGN (PRINT N) (INCF N))) (GO #:G5))) T 6

Macros (cont.) Notação utilizada para simplificar o corpo de macros: `,, e @ (defmacro meu-while (teste &rest corpo) `(loop (unless,teste (return nil)) ),@corpo ) Indica que todos os parâmetros, a partir do segundo serão colocados na lista corpo ` : Introduz um texto que representa uma expressão LISP, : Recupera o valor de uma avaliação (só pode ser usado dentro de um `) @: Recupera todos os elementos de uma lista sem o parêntese inicial e final 3 (só pode ser usado sobre uma lista e dentro de um `) Macros (cont.) (defmacro meu-while (teste &rest corpo) `(loop (unless,teste (return nil)),@corpo ) )?> (meu-while (< n 3) (print n) (incf n)) Agora não precisamos do progn Devido à utilização do &rest 4 7

Macros (cont.) Exemplos:?> (setq l (a b c))?> `,l?> `,l (A B C) (A B C)?> `(list l) (LIST L)?> `(list,l) (LIST (A B C))?> `,@l (QUOTE A B C)?> `(c,@l) (C A B C)?> `(c,l) (C (A B C)) 5 Exercícios Implemente as seguintes funções LISP usando funções de mapeamento:?> (soma-numero 0 (0 5 0)) ;; soma um número aos elementos da lista (0 5 0)?> (n_numeros (a 0 3 f)) ;; retorna a quantidade de números existente em uma lista?> (formata (a b c)) ;; formata* os elementos da lista ( E-A E-B E-C ) * Pesquisar a sintaxe da função format 6 8

Exercícios Implemente as seguintes macros LISP:?> (concat (a b c) ( 3)) ;; une duas listas (A B C 3)?> (meu-for (i ) (< i 3) (print i) (incf i)) Valores impressos pela macro 3 Valor retornado pela macro 7 Seqüências Listas e Arrays são derivações de Sequências LISP possui um grande conjunto de funções para manipular seqüências. Função length subseq replace count reverse nreverse concatenate position find sort search remove delete delete-duplicates substitute nth aref nsubstitute read-from-string Significado Retorna o tamanho da seq. Retorna uma parte da sequência Substitui um elemento Conta o n. de ocorrências de elemento Inverte a ordem da seqüência Inverte e altera a ordem da seqüência Concatena duas ou mais seqüências Encontra a posição de um elem. Encontra um elemento na seq. Ordena a seqüência Encontra uma subseq. em uma seq. Rem. o elem. e retorna uma cópia da seq. Original Remove o elemento e modifica a seq. original Remove duplicações Substitui um elemento Retorna o elemento da lista da pos. desejada Retorna o elemento da seqüência da pos. desejada Substitui um elemento e altera a seq. original Transforma uma string numa expressão simb. LISP 8 9

Seqüências Modificadores comuns em funções de seqüências (remove item sequence :test # equal) (find item sequence :test # eq :key # car) (position #\b foobar :start :end 5) 3 (position #\b (subseq foobar 5)) (position 'a '(a b c) :from-end t) 0 9 Exercícios ) Dada a seguinte definição: (setf mylist '((fhc frango)(collor tereza) (voce nao eh a mamae) (e por favor) (spielberg (toni ramos)) (polvo lula mariscos))) Construa as listas abaixo usando qualquer função que você tenha aprendido até agora. A) (frango nao por favor) B) ((tereza collor) nao eh a mamae) C) (collor fhc lula) D) (spielberg nao eh a favor) 0 0

Exercícios ) Escreva uma função achata", que recebe uma única lista como parâmetro e retorna uma lista simples contendo todos os seus átomos: Ex. (achata '( ( (3))(4 5)) ) ==> ( 3 4 5) (achata '(((((teste))))) ) ==> (teste) 3) Escreva uma função REVERSO, que inverte os elementos de uma lista. Ex. (reverso '(A (B C) D (E F)) ) ==> ((E F) D (B C) A) 4) Escreva uma função REVERSO-TOTAL, que inverte os elementos de uma lista e inverta também, recursivamente, os elementos das listas contidas dentro da primeira. Ex. (reverso-total '(A (B C) D (E F)) ) ==> ((F E) D (C B) A) Exercícios 5) Defina funções LISP que resolvam os seguintes problemas. Para muitos deles já existem funções pré-definidas que fazem o serviço. Neste caso, o nome da função prédefinida é dado entre parêntesis. A) Calcule o quadrado de n apenas fazendo somas. B) Retorne uma lista com o último elemento de uma lista dada (last). C) Receba um número variável de parâmetros (um ou mais) e construa uma lista com todos eles (list). D) Retorna a concatenação de duas listas dadas como parâmetros (append).

Exercícios EX. 5 (continuação) F) Verifique se uma lista é sublista da outra, isto é, consiste de um trecho consecutivo da outra. G) Retorne a sublista contendo os n primeiros elementos de uma lista dada. H) Retorne o último token de uma string que contém uma frase. Ex: meu carro quebrou quebrou I) Substitua parte de uma string por uma outra string. Ex: (substituir xx as assim ) xxim J) Faça a intersecção de duas listas (intersection) Retorne a parte de uma string que está entre duas outras partes. Ex: (remove-parte casabrancadosul casa do ) branca Substitua a parte de uma string que está entre duas outras partes. Ex: (remove-parte casabrancadosul casa do azul ) casaazuldosul 3