Top Banner
20

Introduo Ao Scheme

Dec 14, 2014

Download

Documents

Vania Mira

Basic about scheme...
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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)))