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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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

( let (( len ( vector-length ( car vecs ))))<br />

( let (( vec-new ( make-vector len )))<br />

(do ((i 0 (+ i 1)))<br />

((= i len ) vec-new )<br />

( vector-set ! vec-new i<br />

( apply proc ( map ( lambda (x)<br />

( vector-ref x i))<br />

vecs ))))))))<br />

Uma variante vector-map! modifica o primeiro dos vetores, escrevendo nele o resultado<br />

da operação:<br />

( define vector-map !<br />

( lambda ( proc . vecs )<br />

( let (( len ( vector-length ( car vecs ))))<br />

( let (( vec-new ( car vecs )))<br />

(do ((i 0 (+ i 1)))<br />

((= i len ) vec-new )<br />

( vector-set ! vec-new i<br />

( apply proc ( map ( lambda (x)<br />

( vector-ref x i))<br />

vecs ))))))))<br />

O procedimento vector-fold aplica um procedimento a todos os elementos de um<br />

vetor, dois a dois:<br />

( define vector-fold<br />

( lambda ( proc init vec )<br />

(do ((i 0 (+ i 1))<br />

( res init ( proc res ( vector-ref vec i ))))<br />

((= i ( vector-length vec )) res ))))<br />

O corpo do do em vector-fold é vazio: conseguimos escrever o que queríamos<br />

usando apenas as partes de inicialização e atualização das variáveis e o teste.<br />

Versão Preliminar<br />

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

101

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

Saved successfully!

Ooh no, something went wrong!