08.02.2015 Views

Programação Funcional e Concorrente com Scheme

Programação Funcional e Concorrente com Scheme

Programação Funcional e Concorrente com Scheme

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

notas de aula - Jerônimo C. Pellegrini<br />

Em <strong>Scheme</strong>, a forma lambda deve ter, imediatamente após o símbolo lambda, a lista<br />

de argumentos. Esta lista pode estar entre parênteses, <strong>com</strong>o em todos os procedimentos<br />

que criamos até agora, ou pode ser um símbolo – e neste caso este símbolo será o nome<br />

da lista de argumentos:<br />

( define norm<br />

( lambda points<br />

( sqrt ( sum-squares points ))))<br />

Neste exemplo, o símbolo points será vinculado à lista de argumentos – e teremos<br />

agora um procedimento norm que funciona para qualquer número de dimensões!<br />

Usando a notação abreviada para definição de procedimentos, podemos ter acesso à<br />

lista de argumentos usando (define (procedimento . argumentos) corpo ...):<br />

( define ( norm . points )<br />

( sqrt ( sum-squares points )))<br />

1.8 funções de alta ordem<br />

(esta seção está in<strong>com</strong>pleta)<br />

Em linguagens de programação dizemos que um objeto é de primeira classe quando<br />

podemos dar-lhe um nome, passá-lo <strong>com</strong>o parâmetro para uma subrotina e usá-lo <strong>com</strong>o<br />

valor de retorno. Em todas as linguagens de programação de alto nível números, caracteres,<br />

strings e booleanos são objetos de primeira classe. Em linguagens funcionais, funções<br />

(procedimentos em <strong>Scheme</strong>) também são objetos de primeira classe 13 . Nosso list-reduce<br />

é um exemplo de procedimento de alta ordem.<br />

O Capítulo 5 traz uma grande quantidade de exemplos de procedimentos de alta<br />

ordem. Nesta seção detalharemos dois exemplos: <strong>com</strong>posição de funções e Currying.<br />

Nesta seção usaremos os procedimentos <strong>Scheme</strong> apply e call-with-values.<br />

O procedimento apply é parte da essência de um interpretador <strong>Scheme</strong> e será descrito<br />

em detalhes no Capítulo 6. Quando chamado <strong>com</strong> um procdimento proc e uma lista <strong>com</strong>o<br />

argumentos args, apply chamará proc <strong>com</strong> a lista de argumentos e retornará o resultado:<br />

13 Nas linguagens Lisp os próprios nomes de variáveis são objetos de primeira classe, tornando a manipulação<br />

simbólica algo muito simples.<br />

Versão Preliminar<br />

34<br />

[ 27 de outubro de 2010 at 15:47 ]

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!