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

ne)<br />

0))))<br />

( lambda () counter )))<br />

Guardamos os dois fechos nas variáveis show e inc,<br />

(eval# ’(def show (car (cdr inc-show))) ne)<br />

(eval# ’(def inc (car inc-show)) ne)<br />

e finalmente verificamos que nosso interpretador de fato implementa fechos corretamente:<br />

(eval# ’(show) ne)<br />

0<br />

(eval# ’(inc) ne)<br />

(eval# ’(show) ne)<br />

1<br />

Finalmente, construiremos um REPL!<br />

( define o-repl<br />

( lambda (in out )<br />

( let (( env ( list ’())))<br />

( for-each ( lambda ( name )<br />

( eval # ( list ’def name ( scheme-eval name ))<br />

env ))<br />

primitive-names )<br />

( eval # ’( def * prompt * " toylisp :: ") env )<br />

( let loop ()<br />

( display ( eval # ’* prompt * env ) out )<br />

( let (( forma ( read in )))<br />

( display ( eval # forma env ) out )<br />

( newline )<br />

( loop ))))))<br />

Versão Preliminar<br />

Iniciamos o REPL de nosso toylisp assim:<br />

( o-repl ( current-input-port )<br />

( current-output-port ))<br />

[ 27 de outubro de 2010 at 15:47 ]<br />

155

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!