Professional Documents
Culture Documents
. 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.
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.
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>)
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 odd? <e1> even? <e> (= <e1><en>) (> <e1><en>) (< <e1><en>)
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
Nmeros
1. 2. 3. 4. 5. 6. 7. 8.
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
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> +