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

Jerônimo C. Pellegrini<br />

O exemplo a seguir mostra uma implementação de list-reduce usando letrec<br />

para definir uma função recursiva visível apenas internamente. O procedimento interno<br />

really-reduce verifica se a lista tem tamanho um; se tiver, retorna a cabeça da lista e<br />

em caso contrário aplica o procedimento sobre a cabeça da lista e o resto da <strong>com</strong>putação<br />

realizada por really-reduce na cauda da lista.<br />

( define list-reduce<br />

( lambda ( proc default lista )<br />

( letrec (( really-reduce<br />

( lambda ( proc lista )<br />

(if (= 1 ( length lista ))<br />

( car lista )<br />

( proc ( car lista )<br />

( really-reduce proc<br />

( cdr lista )))))))<br />

(if ( null lista )<br />

default<br />

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

(deve entrar uma figura aqui para ilustrar o reduce)<br />

1.6.6 Definições internas<br />

Uma maneira de conseguir o mesmo efeito de um letrec é usar uma forma define<br />

interna:<br />

( define list-reduce<br />

Versão Preliminar<br />

( define really-reduce<br />

( lambda ( proc lista )<br />

(if (= 1 ( length lista ))<br />

( car lista )<br />

( proc ( car lista )<br />

( really-reduce proc<br />

( cdr lista ))))))<br />

(if ( null lista )<br />

default<br />

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