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

Jerônimo C. Pellegrini<br />

4 V E T O R E S , M AT R I Z E S E N Ú M E R O S<br />

Este Capítulo aborda <strong>com</strong>putação numérica <strong>com</strong> matrizes em <strong>Scheme</strong>.<br />

4.1 matrizes<br />

<strong>Scheme</strong> padrão não oferece qualquer suporte para a representação de matrizes, porque<br />

elas podem ser muito facilmente implementadas usando vetores: uma matriz m × n<br />

pode ser implementada <strong>com</strong>o um vetor de tamanho mn, onde as linhas são dispostas<br />

consecutivamente.<br />

Ao criar a matriz, alocamos um vetor de tamanho mn + 1. A última posição do vetor<br />

será usada para guardarmos o número de colunas:<br />

( define make-matrix<br />

( lambda (m n)<br />

( let (( res ( make-vector (+ 1 (* m n)) 0)))<br />

( vector-set ! res (* m n) n)<br />

res )))<br />

Esta forma de representação é chamada de row-major.<br />

A matriz<br />

(<br />

A B C<br />

D E F<br />

)<br />

Versão Preliminar<br />

é representada na ordem row-major <strong>com</strong>o #(A B C D E F).<br />

Se usássemos a ordem column-major listaríamos as colunas, uma de cada vez, e a<br />

mesma matriz seria representada internamente <strong>com</strong>o #(A D B E C F).<br />

Usaremos row-major em nossa implementação. O número de elementos na matriz é o<br />

tamanho do vetor decrementado de um, e o número de linhas é o número de elementos<br />

dividido pelo número de colunas.<br />

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

115

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

Saved successfully!

Ooh no, something went wrong!