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

(( for x from start to end do body ...)<br />

;; template para contagem:<br />

(do ((x start (+ 1 x )))<br />

((> x end ))<br />

body ...))))<br />

Aparentemente, a macro funciona:<br />

(for e in ’(a b c) do (display e) (newline))<br />

a<br />

b<br />

c<br />

#f<br />

No entanto, ela parece funcionar também quando não deveria:<br />

(for e blah ’(a b c) blah (display e) (newline))<br />

a<br />

b<br />

c<br />

#f<br />

O padrão (for x in lista do body ...) contém cinco identificadores após o for,<br />

e cada um dos cinco casou <strong>com</strong> um dos argumentos passados para a macro:<br />

x<br />

in<br />

→ e<br />

→ blah<br />

lista → ’(a b c)<br />

do<br />

→ blah<br />

body ... → ( display e) ( newline )<br />

Este problema não aparenta ser tão sério, mas a segunda forma do for não funciona:<br />

(for i from 10 to 15 do (display i) (newline))<br />

Error: (car) bad argument type: 10<br />

Versão Preliminar<br />

O interpretador nos diz que tentou aplicar car no argumento “10”. Isso significa que<br />

a regra aplicada foi a primeira (para listas) e não a segunda (para contagem).<br />

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