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

m − k elementos casam <strong>com</strong> Pe; os outros n − m elementos casam <strong>com</strong> Pm+1 até Pn;<br />

o último cdr casa <strong>com</strong> Px;<br />

7. P é da forma #(P1 ... Pn) e X é um vetor cujos n elementos casam <strong>com</strong> P1...Pn.<br />

8. P é da forma #(P1 ... Pk Pe ELIPSE Pm+1 ... Pn), e X é um vetor <strong>com</strong> n ou mais<br />

elementos. Os primeiros k elementos do vetor devem casar <strong>com</strong> P1 ... Pk. Os<br />

próximos m − k elements devem casar <strong>com</strong> Pe. Os outros n − m elementos devem<br />

casar <strong>com</strong> Pm+1 e Pn;<br />

9. P é um dado diferente de lista, vetor ou símbolo e X é equal a P.<br />

Quando uma entrada casa <strong>com</strong> um padrão, ela é substituída pelo template correspondente,<br />

já <strong>com</strong> as trocas identificadas no casamento de padrões. Neste template, os literais<br />

permanecem inalterados, mas as variáveis são renomeadas (de forma transparente ao<br />

programador) para não gerar conflito <strong>com</strong> nomes já usados em outras partes do código.<br />

7.3.4 Exemplo: estruturas de controle<br />

É <strong>com</strong>um em <strong>Scheme</strong> e em outros lisps a implementação de estruturas de controle <strong>com</strong>o<br />

macros. Esta seção apresenta três macros simples para controle: when, unless e while.<br />

A macro when é útil quando queremos avaliar várias expressões dependendo do<br />

resultado de um teste, <strong>com</strong>o neste exemplo:<br />

(if (> n 0)<br />

( begin<br />

...<br />

...))<br />

Podemos usar o if <strong>com</strong> um só braço, mas precisamos do begin – e isto é ligeiramente<br />

inconveniente. O cond também não parece natural:<br />

( cond (( > n 0)<br />

...<br />

...))<br />

Versão Preliminar<br />

Criaremos então uma forma when, que resolverá o problema:<br />

( when (> n 0)<br />

...<br />

...)<br />

176<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!