67

Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

Embed Size (px)

Citation preview

Page 1: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara
Page 2: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara. Scheme foi influenciada pelo cálculo lambda, que é uma das primeiras linguagens de programação funcional no mundo, também teve seu escopo estático herdade de Algol e a sintaxe de Lisp. É uma linguagem muito bem desenhada e de propósito geral.

Page 3: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• A flexibilidade de Scheme é gatantida devido a ausência de restrições, assim o porder da linguagem não limitando .

• Utilização de sistema de recursão denominado “Tail Recursion” (recursão de cauda).

Page 4: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Homogeneidade com sua notação pré-fixada, ou seja, existe basicamente uma regra que rege a escrita de qualquer expressão:

(+ 2 3)

(squart 5)

(f x y)

Page 5: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• A passagem de parâmetros é feita por valor.

• Utilização de Listas como mecanismo básico de estruturação de dados.

• Suporta multiplos-paradigmas como, programação funcional, imperativa , orientação a objetos, etc.

Page 6: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Boolean:

• #t = True (Qualquer coisa diferente de zero e “Lista vazia”).

• #f = False (Zero ou “Lista vazia”).

Page 7: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Numbers:

• Number = (42).

• Complex = (2+3i).

• Real = (3.1416), (22/7), (42)

Page 8: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Numbers:

• Rational = (3.1416), (22/7)

• Integer = (42).

• Number = Complex = Real = Rational = Integer.

Page 9: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Characteres: São representados pela prefixo #\

• #\c = caracter (c).

• #\newline = (nova linha).

• #\space = (espaço em branco).

Page 10: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Symbols:

• Apesar de ser tipo simples, ou seja, primitivo como os anteriores, são tratados como identificadores de variáveis, portanto seu valor é o valor contido na mesma.

• Para especificarmos um símbolo usamos a palavra reservada quote ou aspa simple antes do símbolo.

Page 11: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Symbols:

• (quote xyz)=> xyz

• ‘E=> E

Page 12: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• String:

• Não é um tipo simples, ou seja, primitivo como os anteriores, é composta pela combinação de caracteres, sendo assim uma seqüência de caracteres de modo estruturado e entre aspas duplas “”.

Page 13: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• String:

• (string #\h #\e #\l #\l #\o) )

=> "hello"

• "Hello, World!"

=> "Hello, World!"

Page 14: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Vectors:

• São seqüências como as Strings mas, seus elementos podem ser uma seqüência de qualquer tipo e não apenas de caracteres.

• (vector 0 1 2 3 4) => #(0 1 2 3 4)

Page 15: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Dotted pair:

• É composto de dois valores arbitrarios, sendo o primeiro chamado de car e o segundo de cdr e sua combinação é realizada com a palavra reservada cons.

Page 16: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Dotted pair:

• (cons 1 #t)

=> (1 . #t)

Page 17: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• List:

• Listas podem ser construídas simplesmente colocando os valores desejados entre parênteses e utilizando aspa simple antes do primeiro parêntese ou utilizando a palavra reservada list. Listas podem conter qualquer valor inclusive lista de lista.

Page 18: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• List:

• > ‘(2 4 6 8 10)

=> (2 4 6 8 10)

• > (list 2 4 6 8 10)

=> (2 4 6 8 10)

Page 19: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• List:

• Assim como em vetores, podemos utilizar car e cdr para acessarmos o 1º elemento e o restante da lista respectivamente.

• > (car (list 2 4 6 8 10))=> 2

Page 20: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• List:

• > (cdr (list 2 4 6 8 10))=> (4 6 8 10)

• > (car (cdr (list 2 4 6 8 10)))=> 4

Page 21: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• List:

• Podemos utilizar várias combinações de car e cdr.

• > (cadr (list 2 4 6 8 10))=> 4

• > (cddr (list 2 4 6 8 10))=> (6 8 10)

Page 22: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• List:•(caar ls) ; is the same as (car (car ls))• (cadr ls) ; is the same as (car (cdr ls))•(cdar ls) ; is the same as (cdr (car ls))•(cddr ls) ; is the same as (cdr (cdr ls))•(caaar ls) ; is the same as (car (car (car ls)))•(caadr ls) ; is the same as (car (car (cdr ls)))•(cadar ls) ; is the same as (car (cdr (car ls)))•(caddr ls) ; is the same as (car (cdr (cdr ls)))•(cdaar ls) ; is the same as (cdr (car (car ls)))•(cdadr ls) ; is the same as (cdr (car (cdr ls)))•(cddar ls) ; is the same as (cdr (cdr (car ls)))•(cdddr ls) ; is the same as (cdr (cdr (cdr ls)))

Page 23: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• List:•(cadaar ls) ; is the same as (car (cdr (car (car ls))))•(cadadr ls) ; is the same as (car (cdr (car (cdr ls))))•(caddar ls) ; is the same as (car (cdr (cdr (car ls))))•(cadddr ls) ; is the same as (car (cdr (cdr (cdr ls))))•(cdaaar ls) ; is the same as (cdr (car (car (car ls))))•(cdaadr ls) ; is the same as (cdr (car (car (cdr ls))))•(cdadar ls) ; is the same as (cdr (car (cdr (car ls))))•(cddadr ls) ; is the same as (cdr (cdr (car (cdr ls))))•(cdddar ls) ; is the same as (cdr (cdr (cdr (car ls))))•(cddddr ls) ; is the same as (cdr (cdr (cdr (cdr ls))))

Page 24: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Existem três tipos de expressões condicionais:

• Usando a palavra reservada If.

• Usando a palavra reservada Cond.

• Usando a palavra reservada Case.

Page 25: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Expressão condicionail If :

• (if condição conseqüência alternativa)

• (if condição conseqüência)

Page 26: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Expressão condicionail If :

• (if (< a b) (square a) (square b))

• (if (< x1 x2) (> x2 x3)

(if (> x1 x2) (< x2 x3)

#f))

Page 27: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Expressão condicionail Cond :

• (cond (condição1 conseqüência1)(condição2 conseqüência2)...(else alternativa))

Page 28: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Expressão condicionail Cond :

• (cond ((> a b) (square a))((> b c) (square b))...(else (square c)))

Page 29: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Expressão condicionail Case :

• (case arg expr1 expr2 expr3 ...)

Page 30: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Expressão condicionail Case :

• (case (+ 3 4)

((7) 'seven)

((2) 'two)

(else 'nothing))

=> seven

Page 31: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Expressão condicionail Case :

• (case 'a

((a b c d) 'first)

((e f g h) 'second)

(else 'rest))

=> first

Page 32: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Existem três tipos de expressões lógicas:

• Usando a palavra reservada And.

• Usando a palavra reservada Or.

• Usando a palavra reservada Not.

Page 33: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Expressões lógica com And:

• (and expr1 expr2 ... exprn)

Page 34: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Expressões lógica com And:

• (and (< 2 5) (< 2 4))

=>#t

Page 35: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Expressões lógica com Or:

• (or expr1 expr2 ... exprn)

Page 36: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Expressões lógica com Or:

• (or (< 2 5) (< 2 4))

=>#t

Page 37: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Expressões lógica com Not:

• (not expr)

Page 38: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Expressões lógica com Not:

• (not (< 5 10))

=> #f

Page 39: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Utilizamos a palavra reservada define para declarar variáveis globais:

• (define a 10)

a

=>10

Page 40: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Utilizamos a palavra reservada set! Para alterar variáveis:

• (define a 10)

a

=>10

(set! a 5)

a

=> 5

Page 41: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara
Page 42: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Utilizando a palavra reservada define:

• (define (square x) (* x x))

• (square 2)

=> 4

Page 43: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Utilizando a palavra reservada lambda:

• (lambda formal-parâmetros body)

• (lambda (x) (* 2x) 5)

=> 10

Page 44: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Utilizamos a palavra reservada let e let* para criar variáveis locais. A diferença entre as duas declarações é que let* é um aninhamento de lets, ou seja, uma variável declarada em um let mais a esquerda pode ser usada em um let mais a direita.

• (let ((var1 exp1) (var2 exp2) . . . (varn expn)) body)

Page 45: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Utilizando a palavra reservada let.

• (let ((x 2) (y 10)) (+ x y))

=> 12

• (let ((x 2) (y 10)) (/ y x))

=> 5

Page 46: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Utilizando a palavra reservada let.

• (define x 10)

(+ (let ((x 5)) (* x (+ x 2))) x)

=> 45

• (define x 10)

(let ((x 5) (y (* x 2))) (+ x y))

=> 25

Page 47: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Utilizando a palavra reservada let*.

• (let* ((var1 exp1)

(var2 exp2)

. . .

(varn expn))

body)

Page 48: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• O que é equivalente a:

• (let ((var1 expr1))

(let ((var2 expr2))

(let ...

(let ((varn exprn))

body) ... )))

Page 49: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Utilizando a palavra reservada let*.

• (define x 10)

(let* ((x 5)

(y (* x 2)))

(+ x y))

=> 15

Page 50: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Comparando let com let*.

• (define x 10)

(let ((x 5) (y (* x 2)))

(+ x y))

=> 25

• (define x 10)

(let* ((x 5) (y (* x 2)))

(+ x y))

=> 15

Page 51: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Utilizando a palavra reservada do.

• É uma construção de iteração complexa, onde algumas variáveis são especificadas, a inicialização de algumas também e o passo, ou seja, um controle de loop. É um loop parecido com o for.

• (do ((var1 init1 step1)

...)

(test expr ...) command ...)

Page 52: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Utilizando a palavra reservada do.

• (do ((str (string #\f #\o #\o #\b #\a #\r))

(i 0 (+ i 1 ))) ((= i (string-length str ) ) str )

(string-set! str i #\b))

• A saída será:

• => "bbbbbb"

Page 53: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Utilizando a palavra reservada letrec.

• (letrec ((var1 val1)

(var2 val2)

. . .

(varn valn))

body)

Page 54: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Utilizando a palavra reservada letrec.

• (define factorial

(lambda (n)

(letrec ((iter

(lambda (product counter)

(if (> counter n)

product

(iter (* counter product)

(+ counter 1))))))

(iter 1 1)))

Page 55: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Tail recursion.

• São chamadas recursivas que não necessitam de alocação dinâmica na memória, ou seja, utilização de empilhamento de chamadas recursivas. Cada chamada já passa a resposta da sua iteração para a próxima iteração, assim não precisamos de fazer o desempilhamento devolvendo a resposta de cada chamada recursiva para combinarmos e encontrarmos a resposta final.

Page 56: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Utilizando Tail recursion.

• (define (factorial-tail n)(factorial-helper n 1))

(define (factorial-helper n total)(if (equal? n 0)

      total     (factorial-helper (- n 1) (* n total))))

Page 57: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Utilizando Tail recursion.

• A saída será:

• (factorial-tail 5 )=> 120

Page 58: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Utilizando Recursão normal.

• (define (factorial n)( if (equal? n 0)

      1     (* n (factorial (- n 1 )))))

Page 59: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Utilizando Recursão normal.

• A saída será |(factorial 5)| (factorial 4)| |(factorial 3)| | (factorial 2)| | |(factorial 1)| | | (factorial 0)| | | 1| | |1| | 2| |6| 24|120

Page 60: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• Para gerarmos a saída “Hello World” usamos o seguinte código:

• (display "Hello World!")

(newline)

=> Hello World!

=>

Page 61: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• (define bottles• (lambda (n)• (cond ((= n 0) (display "No more bottles"))• ((= n 1) (display "One bottle"))• (else (display n) (display " bottles")))• (display " of beer")))

• (define beer• (lambda (n)• (if (> n 0)• (begin• (bottles n) (display " on the wall") (newline)• (bottles n) (newline)• (display "Take one down, pass it around") (newline)• (bottles (- n 1)) (display " on the wall") (newline)• (newline)• (beer (- n 1))))))

• (beer 99)

Page 62: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara
Page 63: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara
Page 64: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara
Page 65: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara
Page 66: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara
Page 67: Scheme foi criada em 1975 no laboratório de AI do MIT por Guy L. Steele e Gerald J. Sussman que queriam criar uma linguagem de semântica simples e clara

• http://en.literateprograms.org/Hello_World_(Scheme)• http://www.cs.hut.fi/Studies/T-93.210/schemetutorial/node1.html• http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html• http://pheattarchive.emporia.edu/courses/2002/cs220f02/anotherSchemeTtutorial/default.htm• http://www.inf.ufsc.br/~barreto/trabaluno/PF_Geraldo_Maria.pdf

Festa com 99 bottles of the beer (youtube)• http://www.youtube.com/watch?v=vWKKuBblumo• http://www.youtube.com/watch?v=n_C7Rj2qMMs&feature=related• http://www.youtube.com/watch?v=PyEMGDa8Jcg&feature=related

Concurso Talent Explosion e vídeo no youtube• http://www.youtube.com/watch?v=lQrOhQhdoQI&feature=related• http://www.shawnlam.ca/jackfm/