introduo ao scheme
DESCRIPTION
Basic about scheme...TRANSCRIPT
� O Scheme é uma linguagem de programação, ou seja,
corresponde a um formalismo para escrever programas.
� Um programa em Scheme é uma sequência de
expressões ou de definições, as quais são designadas expressões ou de definições, as quais são designadas
genericamente por formas.
� Um programa em Scheme pode ser introduzido e
avaliado interactivamente num ambiente que exista um
interpretador do Scheme.
Sintaxe e SemânticaSintaxe e SemânticaSintaxe e SemânticaSintaxe e Semântica
Como todas outras linguagens de programação, o scheme apresenta dois
aspectos distintos: as frases da linguagem e o significado associado a
estas frases. Estes aspectos são denominados respectivamente sintaxe e
semântica.
Sintaxe:Sintaxe:
A sintaxe determina a constituição das frases que podem ser fornecidas
ao computador (as formas).
Para descrever a sintaxe das formas em Sheme, utilizaremos uma notação
conhecida como BNF.
Para designar um componente da linguagem usaremos parêntesis
angulares “<” e “>”.
Ex: <forma> - uma forma arbitrária em Scheme;
Símbolos terminais:Símbolos terminais:Símbolos terminais:Símbolos terminais:
� “| “ – Lê-se “ou” (representa vária alternativas);
� “::=” – Lê-se “é definido como” serve para definir componentes
da linguagem;
� “+” – a utlização deste carácter imediatamente após um
símbolo, significa que este pode ser repetido uma ou mais vezes;símbolo, significa que este pode ser repetido uma ou mais vezes;
� “*” – a utlização deste carácter imediatamente após um símbolo,
significa que este pode ser repetido zero ou mais vezes.
Constituição de um programa em Scheme:
<Programa em Scheme> ::= <forma>*
<forma>::=<definição>|<expressão>
Semântica:
Cada forma em Scheme tem uma semântica, a qual representa a
acção tomada pelo interpretador ao avaliar essa forma, ou seja,
o significado que o interpretador atribuí a forma.
Contrução de formas
Formas Primitivas - Representam as entidades mais simples da
linguagem, as quais tem um significado para o interpretador. linguagem, as quais tem um significado para o interpretador.
Fazem parte do interpretador.
Modos de Combinação - Permitem a construção de formas
compostas, apartir de elementos mais simples.
Modos de abstração - Permitem que elementos compostos
recebam nomes e sejam tratados como unitários.
� ConstantesConstantesConstantesConstantes
As constantes em Scheme podem ser:
� NúmerosNúmerosNúmerosNúmeros
Os Números são dados primitivos disponibilizados pela linguagem Scheme, e representam e devolvem o próprio valor.
� InteirosInteirosInteirosInteiros� InteirosInteirosInteirosInteiros
10 +10 -350 1000
� ReaisReaisReaisReais
10.0 10. 10.350 35E2 -3.57E-3
� Valores lógicosValores lógicosValores lógicosValores lógicos
São representados por #true ou #false.
� Cadeias de caracteresCadeias de caracteresCadeias de caracteresCadeias de caracteres
Correspondem a uma sequência de caracteres.
Expressões:
Um dos tipos de formas que mais se usam são expressões.
<expressão>::=<constante>|<combinação>|<nome>
Combinações:
Uma combinção corresponde ao conceito de aplicação de uma
operação a uma sequência de operandos.
Uma combinação é composta por um operador e por um certo
número de operandos.
<combinação>::=(<operador><expressão>*)
� Para processamento dos dados numéricos, a linguagem Scheme disponibiliza vários Procedimentos
� Primitivos, como, por exemplo, os operadores aritméticos:
� + adição
� - subtracção� - subtracção
� * multiplicação
� / divisão
� Nesta linguagem, as Expressões utilizam uma notação pré-fixa, em que o operador aparece antes dos operandos.
� Ex.
� (+ 10 25)
� >35
� Se a expressão é uma constante, o seu valor é a própria
constante.
� Se a expressão é um nome, o seu valor é o objecto
computacional associado ao nome (que pode ser um
procedimento).procedimento).
� Se a expressão é uma forma especial, o seu valor é
calculado pelas regras de avaliação dessa forma
especial.
� Se a expressão é uma combinação, aplica-se o operador
da combinação aos operandos, o que é feito do
seguinte modo:
� Avaliam-se as subexpressões na combinação (por
qualquer ordem).
� Associam-se os parâmetros formais do procedimento
correspondente à primeira subexpressão (o operador)
com os valores das restantes subexpressões (os
parâmetros concretos), pela ordem respectiva.parâmetros concretos), pela ordem respectiva.
� No ambiente definido pela associação entre os
parâmetros formais e os parâmetros concretos,
avalia-se o corpo do procedimento correspondente à
primeira subexpressão
Operação Número de
argumentos
Tipo de
argumentos
Valor
(+ <e1>…<en>) 2 ou mais Números Soma de valores
(- <e1>…<en>) 2 ou mais Números Subtracção de valores
(* <e1>…<en>) 2 ou mais Números Produto de e valores
(/ <e1>…<en>) 2 ou mais Números Divisão de valores
(/ <e >) Um Números Inverso de um valor(/ <e1>) Um Números Inverso de um valor
(sqrt <e1>) Um Números Raíz quadrada de um
valor
(quotient <e1>
<e2>)
Dois Números Resultado da divisão
inteira de dois valores
(remainder <e1>
<e2>)
Dois Números Resto da divisão
inteira de dois valores
Operação Número de
argumentos
Tipo de
argumentos
Valor
- <e1> Um Número Simetrico de <e>
min <e1>…<en> 2 ou mais Números Minimo de valores
max <e1>…<en> 2 ou mais Números Maximo de valores
Operação Número de
argumentos
Tipo de
argumentos
Valor
(and <e1>…<en>) 2 ou mais Condições Conjunção de valores
(or <e1>…<en>) 2 ou mais Condições Disjunção de valores
(not <e1>…<en>) um Condição Negação de um valor
Operação Número de
argumentos
Tipo de
argumentos
Valor
odd? <e1> Um Inteiro Valor #true se for impar
even? <e> Um Inteiro Valor #true se for par
(= <e1>…<en>) Dois ou mais Números Valor #true se forem todos iguais
(> <e1>…<en>) Dois ou mais Números Valor #true se estiverem em
ordem decrescenteordem decrescente
(< <e1>…<en>) Dois ou mais Números Valor #true se estiverem em
ordem crescente
(>= <e1>…<en>) Dois ou mais Números Valor #true se estiverem em
ordem decrescente podendo
existir valores iguais
(<= <e1>…<en>) Dois ou mais Números Valor #true se estiverem em
ordem crescente podendo existir
valores iguais
1. 2+3
2. 5+4+3+2+1
3. 53+42
4. (5+4)34. (5+4)3
5. 2-3-4
6. 2/3/4/5
7. 5+4*3/2+1
8. (5+4)*3/2+1
� Escreva a expressão em notação prefixa:
((7 + 8 ) * (3 / 2))/4
� Escreva a expressão em notação prefixa:
((1+5 – (4/5*5) + 9*4/5))((1+5 – (4/5*5) + 9*4/5))
� Uma função que devolva “true” escrevendo que 4 é
maior do que 5.
� (* (* 34 (- 4 5)) (+ 12 (/ 15 3)))
� A associação entre um nome e um valor é obtida pela
operação de nomeação.
� A operação de nomeação é realizada em Scheme
através do procedimento primitivo chamado define.
� <operação de nomeação>::= (define
<nome><expressão>)
� Em Scheme um <nome> é qualquer sequência de
caracteres que comece com uma letra.
� Ex: (define raio 5)
� Antes de mais devemos recordar o conceito de função.
Esta tem um domínio e contradomínio da função.
� A definição de procedimentos compostos em Scheme é
através de expressões lambda.
� <expressão lambda>::=(<lambda (<parametros
formais>)<corpo>)
� <parametros formais>::=<nome>*
� <corpo>::=<definição>*<expressão>+
Ex: ((lambda (x) (+ x 3)) (* 2 6))
15
� <operação de nomeação>::=(define
<nome><expressão>)|(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)))
� <expressão lambda> ::= (lambda (<parâmetros formais>) <corpo>)
� <parâmetros formais>::=<nome> *
� <corpo> ::= <definição>*<expressão> +
� (if <condição> <expressão1> < expressão2>
� Ex:
� Cálculo do valor absoluto
(define (absoluto x)
(if (>= x 0)
X
(- x)))