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

( define binary *<br />

( lambda (a b)<br />

(if (or ( <strong>com</strong>plex a)<br />

( <strong>com</strong>plex b))<br />

( <strong>com</strong>plex * a b)<br />

( standard * a b ))))<br />

( define n-ary *<br />

( lambda args<br />

( list-reduce binary * 1 args )))<br />

Note que desta vez passamos 1 <strong>com</strong>o valor default para list-reduce.<br />

O padrão <strong>Scheme</strong> também define procedimentos para obter a magnitude e o ângulo<br />

de um <strong>com</strong>plexo. Nossa implementação é:<br />

( define magnitude<br />

( lambda ( args )<br />

( norm ( car args )<br />

( cadr args ))))<br />

O ângulo entre um vetor (a, b) no plano <strong>com</strong>plexo e o eixo das abscissas é atan(b/a):<br />

( define ang<br />

( lambda (c)<br />

( atan (/ ( imag-p c)<br />

( real-p c )))))<br />

1.14 formatação de código<br />

Nas linguagens do tipo Lisp é <strong>com</strong>um que o código seja formatado da seguinte maneira:<br />

• Quando um parêntese é aberto sem que seja fechado em uma linha, a próxima linha<br />

é indentada à frente (normalmente usam-se dois espaços);<br />

Versão Preliminar<br />

• Parênteses são fechados todos juntos, sem quebra de linha entre eles.<br />

A seguir há um trecho de código formatado conforme a tradição Lisp e outro, que<br />

certamente causa estranheza a usuários experientes de Lisp (pessoas acostumadas <strong>com</strong><br />

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