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

( really-reduce proc lista )))<br />

1.7 número variável de argumentos<br />

Procedimentos <strong>Scheme</strong> não precisam ter um número fixo de argumentos.<br />

O procedimento sum-squares retorna a soma dos quadrados de uma lista de números.<br />

( define square<br />

( lambda (x) (* x x )))<br />

( define sum-squares<br />

( lambda ( points )<br />

(if ( null points )<br />

0<br />

(+ ( square ( car points ))<br />

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

Este procedimento funciona <strong>com</strong> listas de pontos de qualquer tamanho, inclusive a<br />

lista vazia (para a qual o valor é zero).<br />

Outro procedimento que poderemos usar é o que dá a norma de um vetor (ou seja, a<br />

distância entre este vetor e a origem no plano):<br />

( define norm-2d<br />

( lambda (a b)<br />

( sqrt ( sum-squares ( list a b )))))<br />

Poderemos precisar também a norma de vetores em três dimensões, e para isso<br />

escrevemos um procedimento semelhante ao anterior:<br />

( define norm-3d<br />

( lambda (a b c)<br />

( sqrt ( sum-squares ( list a b )))))<br />

Versão Preliminar<br />

Os procedimentos norm-2d e norm-3d são iguais a não ser pelo argumento c. Estamos<br />

evidentemente duplicando código! Se tivermos acesso à lista de argumentos do procedimento,<br />

(a b) para norm-2d ou (a b c) para norm-3d, poderemos simplesmente chamar<br />

(sqrt (sum-squares lista-de-argumentos)).<br />

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

33

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

Saved successfully!

Ooh no, something went wrong!