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

inline 1 (<strong>com</strong>o fazê-lo depende da implementação de <strong>Scheme</strong>). Uma das coisas que se pode<br />

fazer <strong>com</strong> funções e não <strong>com</strong> macros é usá-las <strong>com</strong>o parâmetros. Suponha, por exemplo,<br />

que uma função plus1 seja usada <strong>com</strong>o forma curta de (+ 1 x), e que se queira diminuir<br />

o tempo usado para chamá-la:<br />

( define plus1<br />

( lambda (x) (+ 1 x )))<br />

A função plus1 é entidade de primeira classe, e pode ser passada <strong>com</strong>o argumento<br />

para procedimentos:<br />

(map plus1 ’(1 2 3))<br />

’(2 3 4)<br />

(apply plus1 ’(3))<br />

4<br />

Para tentar reduzir o tempo usado em chamadas de função, uma solução ingênua é<br />

implementar + <strong>com</strong>o macro:<br />

( define-syntax plus1<br />

( syntax-rules ()<br />

((_ arg1 )<br />

(+ 1 arg1 ))))<br />

(macroexpand ’(plus1 10))<br />

(+ 1 10)<br />

No entanto. macros não são entidades de primeira classe:<br />

(map plus1 ’(1 2 3))<br />

ERROR: unbound variable plus1<br />

(apply plus1 ’(1 2 3))<br />

ERROR: unbound variable plus1<br />

1 O mesmo vale para a linguagem C!<br />

Versão Preliminar<br />

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