Você está na página 1de 20

O Scheme uma linguagem de programao, ou seja, corresponde a um formalismo para escrever programas.

. Um programa em Scheme uma sequncia de expresses ou de definies, as quais so designadas genericamente por formas. Um programa em Scheme pode ser introduzido e avaliado interactivamente num ambiente que exista um interpretador do Scheme.

Sintaxe e Semntica
Como todas outras linguagens de programao, o scheme apresenta dois aspectos distintos: as frases da linguagem e o significado associado a estas frases. Estes aspectos so denominados respectivamente sintaxe e semntica.

Sintaxe:
A sintaxe determina a constituio das frases que podem ser fornecidas ao computador (as formas). Para descrever a sintaxe das formas em Sheme, utilizaremos uma notao conhecida como BNF. Para designar um componente da linguagem usaremos parntesis angulares < e >. Ex: <forma> - uma forma arbitrria em Scheme;

Smbolos terminais:
| L-se ou (representa vria alternativas); ::= L-se definido como serve para definir componentes da linguagem; + a utlizao deste carcter imediatamente aps um smbolo, significa que este pode ser repetido uma ou mais vezes; * a utlizao deste carcter imediatamente aps um smbolo, significa que este pode ser repetido zero ou mais vezes.

Constituio de um programa em Scheme: <Programa em Scheme> ::= <forma>* <forma>::=<definio>|<expresso>

Semntica: Cada forma em Scheme tem uma semntica, a qual representa a aco tomada pelo interpretador ao avaliar essa forma, ou seja, o significado que o interpretador atribu a forma. Contruo de formas Formas Primitivas - Representam as entidades mais simples da linguagem, as quais tem um significado para o interpretador. Fazem parte do interpretador. Modos de Combinao - Permitem a construo de formas compostas, apartir de elementos mais simples. Modos de abstrao - Permitem que elementos compostos recebam nomes e sejam tratados como unitrios.

Constantes As constantes em Scheme podem ser: Nmeros Os Nmeros so dados primitivos disponibilizados pela linguagem Scheme, e representam e devolvem o prprio valor. Inteiros 10 +10 -350 1000 Reais 10.0 10. 10.350 35E2 -3.57E-3 Valores lgicos So representados por #true ou #false. Cadeias de caracteres Correspondem a uma sequncia de caracteres.

Expresses: Um dos tipos de formas que mais se usam so expresses. <expresso>::=<constante>|<combinao>|<nome>

Combinaes: Uma combino corresponde ao conceito de aplicao de uma operao a uma sequncia de operandos. Uma combinao composta por um operador e por um certo nmero de operandos. <combinao>::=(<operador><expresso>*)

Para processamento dos dados numricos, a linguagem Scheme disponibiliza vrios Procedimentos Primitivos, como, por exemplo, os operadores aritmticos: + adio - subtraco * multiplicao / diviso Nesta linguagem, as Expresses utilizam uma notao pr-fixa, em que o operador aparece antes dos operandos. Ex. (+ 10 25) >35

Se a expresso uma constante, o seu valor a prpria constante. Se a expresso um nome, o seu valor o objecto computacional associado ao nome (que pode ser um procedimento). Se a expresso uma forma especial, o seu valor calculado pelas regras de avaliao dessa forma especial. Se a expresso uma combinao, aplica-se o operador da combinao aos operandos, o que feito do seguinte modo:

Avaliam-se as subexpresses na combinao (por qualquer ordem). Associam-se os parmetros formais do procedimento correspondente primeira subexpresso (o operador) com os valores das restantes subexpresses (os parmetros concretos), pela ordem respectiva. No ambiente definido pela associao entre os parmetros formais e os parmetros concretos, avalia-se o corpo do procedimento correspondente primeira subexpresso

Operao (+ <e1><en>) (- <e1><en>) (* <e1><en>) (/ <e1><en>) (/ <e1>) (sqrt <e1>) (quotient <e1> <e2>) (remainder <e1> <e2>)

Nmero de argumentos 2 ou mais 2 ou mais 2 ou mais 2 ou mais Um Um Dois

Tipo de argumentos Nmeros Nmeros Nmeros Nmeros Nmeros Nmeros Nmeros

Valor Soma de valores Subtraco de valores Produto de e valores Diviso de valores Inverso de um valor Raz quadrada de um valor Resultado da diviso inteira de dois valores Resto da diviso inteira de dois valores

Dois

Nmeros

Operao - <e1> min <e1><en> max <e1><en>

Nmero de argumentos Um 2 ou mais 2 ou mais

Tipo de argumentos Nmero Nmeros Nmeros

Valor Simetrico de <e> Minimo de valores Maximo de valores

Operao (and <e1><en>) (or <e1><en>) (not <e1><en>)

Nmero de Tipo de argumentos argumentos 2 ou mais 2 ou mais um Condies Condies Condio

Valor Conjuno de valores Disjuno de valores Negao de um valor

Operao odd? <e1> even? <e> (= <e1><en>) (> <e1><en>) (< <e1><en>)

Nmero de argumentos Um Um Dois ou mais Dois ou mais Dois ou mais

Tipo de Valor argumentos Inteiro Inteiro


Nmeros Nmeros Nmeros Nmeros

Valor #true se for impar Valor #true se for par Valor #true se forem todos iguais Valor #true se estiverem em ordem decrescente Valor #true se estiverem em ordem crescente Valor #true se estiverem em ordem decrescente podendo existir valores iguais Valor #true se estiverem em ordem crescente podendo existir valores iguais

(>= <e1><en>) Dois ou mais

(<= <e1><en>) Dois ou mais

Nmeros

1. 2. 3. 4. 5. 6. 7. 8.

2+3 5+4+3+2+1 53+42 (5+4)3 2-3-4 2/3/4/5 5+4*3/2+1 (5+4)*3/2+1

Escreva a expresso em notao prefixa: ((7 + 8 ) * (3 / 2))/4 Escreva a expresso em notao prefixa: ((1+5 (4/5*5) + 9*4/5)) Uma funo que devolva true escrevendo que 4 maior do que 5. (* (* 34 (- 4 5)) (+ 12 (/ 15 3)))

A associao entre um nome e um valor obtida pela operao de nomeao. A operao de nomeao realizada em Scheme atravs do procedimento primitivo chamado define. <operao de nomeao>::= (define <nome><expresso>) Em Scheme um <nome> qualquer sequncia de caracteres que comece com uma letra. Ex: (define raio 5)

Antes de mais devemos recordar o conceito de funo. Esta tem um domnio e contradomnio da funo. A definio de procedimentos compostos em Scheme atravs de expresses lambda. <expresso lambda>::=(<lambda (<parametros formais>)<corpo>) <parametros formais>::=<nome>* <corpo>::=<definio>*<expresso>+ Ex: ((lambda (x) (+ x 3)) (* 2 6)) 15

<operao de nomeao>::=(define <nome><expresso>)|(define (<nome><parametros formais>) <corpo>) Equivalente :


(define <nome>(lambda (<parametros formais>)<corpo))

Ex: (define (soma x) (+x 3)) equivalente : (define soma (lambda (x) (+ x 3)))

<expresso lambda> ::= (lambda (<parmetros formais>) <corpo>) <parmetros formais>::=<nome> * <corpo> ::= <definio>*<expresso> +

(if <condio> <expresso1> < expresso2> Ex: Clculo do valor absoluto

(define (absoluto x) (if (>= x 0) X (- x)))