introduo ao scheme

20

Upload: vania-mira

Post on 14-Dec-2014

31 views

Category:

Documents


1 download

DESCRIPTION

Basic about scheme...

TRANSCRIPT

Page 1: Introduo Ao Scheme
Page 2: Introduo Ao Scheme

� 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.

Page 3: Introduo Ao 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;

Page 4: Introduo Ao 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>

Page 5: Introduo Ao Scheme

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.

Page 6: Introduo Ao Scheme

� 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.

Page 7: Introduo Ao Scheme

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>*)

Page 8: Introduo Ao Scheme

� 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

Page 9: Introduo Ao Scheme

� 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:

Page 10: Introduo Ao Scheme

� 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

Page 11: Introduo Ao Scheme

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

Page 12: Introduo Ao Scheme

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

Page 13: Introduo Ao Scheme

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

Page 14: Introduo Ao Scheme

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

Page 15: Introduo Ao Scheme

� 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)))

Page 16: Introduo Ao Scheme

� 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)

Page 17: Introduo Ao Scheme

� 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

Page 18: Introduo Ao Scheme

� <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)))

Page 19: Introduo Ao Scheme

� <expressão lambda> ::= (lambda (<parâmetros formais>) <corpo>)

� <parâmetros formais>::=<nome> *

� <corpo> ::= <definição>*<expressão> +

Page 20: Introduo Ao Scheme

� (if <condição> <expressão1> < expressão2>

� Ex:

� Cálculo do valor absoluto

(define (absoluto x)

(if (>= x 0)

X

(- x)))