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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

notas de aula - Jerônimo C. Pellegrini<br />

2 E N T R A DA E S A Í DA<br />

Até agora não nos preocupamos <strong>com</strong> a entrada e saída de dados. Interagimos <strong>com</strong> o<br />

interpretador usando o teclado e recebemos suas respostas diretamente. Neste Capítulo<br />

trataremos de entrada e saída de dados em arquivos. Também desenvolveremos parte de<br />

uma biblioteca para geração de imagens vetoriais.<br />

2.1 arquivos e portas<br />

Em <strong>Scheme</strong> a entrada e saída de dados se dá através de portas. Uma porta é um dispositivo<br />

abstrato onde podemos escrever ou ler.<br />

O procedimento open-input-file abre um arquivo para leitura e retorna uma porta<br />

de entrada; já o procedimento open-output-file abre um arquivo para saída e retorna<br />

uma porta de saída. Quando o arquivo não puder ser aberto, uma condição de erro será<br />

levantada.<br />

Podemos verificar se um objeto é uma porta porta (e se é de entrada ou de saída) <strong>com</strong><br />

os procedimentos port, input-port e output-port.<br />

(open-input-file "um-arquivo.txt")<br />

#<br />

( let ((x ( open-output-file " whatever . txt " )))<br />

#t<br />

( output-port x))<br />

Após terminar a leitura ou gravação de dados em um arquivo, fechamos a porta de<br />

Versão Preliminar<br />

entrada (ou saída) <strong>com</strong> close-input-port ou close-output-port.<br />

Todos os procedimentos que realizam entrada e saída recebem um último argumento<br />

opcional que determina que porta será usada. Quando este argumento não está<br />

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

61

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

Saved successfully!

Ooh no, something went wrong!