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 />

(list-map - ’(0 1 2 -3))<br />

(0 -1 -2 3)<br />

O procedimento passado para list-map deve aceitar exatamente um argumento, de<br />

outra forma não haveria <strong>com</strong>o a função ser aplicada.<br />

( define list-map<br />

( lambda ( funcao lista )<br />

(if ( null lista )<br />

lista<br />

( cons ( funcao ( car lista ))<br />

( list-map funcao ( cdr lista ))))))<br />

O padrão define um procedimento map, que é mais geral que o que acabamos de<br />

construir: o procedimento passado para map pode ter qualquer aridade (quantidade de<br />

argumentos), e podemos passar diversas listas depois do procedimento:<br />

( map expt ’(1 3 2)<br />

(1 27 16)<br />

’(2 3 4))<br />

A aridade do procedimento (neste exemplo, 2) deve ser igual ao número de listas. A<br />

nova lista conterá em cada posição i o resultado da aplicação do procedimento, tendo<br />

<strong>com</strong>o argumentos a lista de i-ésimos elementos das listas. No exemplo acima, o primeiro<br />

elemento da lista resultante é (expt 1 2), o segundo (expt 3 3) e o terceiro (expt 2 4).<br />

O procedimento list-reduce toma um procedimento binário, uma lista, e aplica o<br />

procedimento a cada elemento da lista, acumulando o resultado:<br />

(list-reduce * -1 ’(10 20 30))<br />

6000<br />

O primeiro argumento de list-reduce é o procedimento a ser usado; o segundo é o<br />

valor a ser devolvido caso a lista seja vazia; o terceiro é a lista sobre a qual a operação<br />

será aplicada.<br />

Versão Preliminar<br />

(list-reduce * -1 ’())<br />

-1<br />

[ 27 de outubro de 2010 at 15:47 ]<br />

31

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

Saved successfully!

Ooh no, something went wrong!