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

O REPL aceitará e avaliará um trecho de programa <strong>Scheme</strong> também. A expressão<br />

(+ 3 4 5) em <strong>Scheme</strong> significa 5 “chame o procedimento + <strong>com</strong> argumentos 3 4 e 5”:<br />

(+ 3 4 5)<br />

12<br />

O REPL tomou a expressão digitada e enviou ao interpretador, que devolveu o<br />

resultado 12 ao REPL, que por sua vez o mostrou na tela. Trechos de programas <strong>Scheme</strong><br />

são chamados de formas.<br />

A expressão (+ 3 4 5) é uma aplicação de função: “+” é a função que soma números;<br />

“3”, “4” e “5” são seus argumentos. Na notação usual a expressão seria 3+4+5 ou<br />

soma(3, 4, 5).<br />

Embora a notação prefixa pareça estranha em um primeiro contato, ela permite tratar<br />

<strong>com</strong> regularidade todo tipo de função. A notação infixa é normalmente usada apenas para<br />

as quatro operações aritméticas, <strong>com</strong>o em a + b ∗ c − 4; no entanto, ao usar funções <strong>com</strong>o<br />

seno, tangente, logaritmo e outras, usa-se uma notação diferente, que é muito próxima da<br />

prefixa usada em Lisp:<br />

sen(x) (sen x)<br />

tan(x) (tan x)<br />

log(n) (log n)<br />

f(x, y, z) (f x y z)<br />

As duas diferenças são a ausência de vírgulas em Lisp e o nome da função, que em Lisp<br />

fica dentro dos parênteses.<br />

Além do tratamento uniforme, a notação prefixa elimina a necessidade de definição de<br />

precedência de operadores: usando notação infixa, a + b/c ≠ (a + b)/c. Usando notação<br />

prefixa, a expressão (/ (+ a b) c) só pode ser interpretada de uma única forma: “divida<br />

a soma de a e b por c” 6 .<br />

Versão Preliminar<br />

5 Todas as variantes da linguagem Lisp usam notação prefixa.<br />

6 Ler as funções e procedimentos usando verbos <strong>com</strong>o “divida:” ou “some:” ajuda a ambientar-se <strong>com</strong> a<br />

notação prefixa.<br />

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