1 / 67

SCHEME

SCHEME. Um pouco de História.

norina
Download Presentation

SCHEME

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SCHEME

  2. Um pouco de História 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.

  3. Características 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).

  4. Características 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)

  5. Características 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.

  6. Tipos de Dados Boolean: #t = True (Qualquercoisadiferente de zero e “Listavazia”). #f = False (Zero ou “Listavazia”).

  7. Tipos de Dados Numbers: Number = (42). Complex = (2+3i). Real = (3.1416), (22/7), (42)

  8. Tipos de Dados Numbers: Rational = (3.1416), (22/7) Integer = (42). Number = Complex = Real = Rational = Integer.

  9. Tipos de Dados Characteres: São representadospelaprefixo #\ #\c = caracter (c). #\newline = (nova linha). #\space = (espaçoembranco).

  10. Tipos de Dados Symbols: Apesar de ser tipo simples, ouseja, primitivocomoosanteriores, sãotratadoscomoidentificadores de variáveis, portantoseu valor é o valor contidonamesma. Para especificarmos um símbolousamos a palavrareservadaquoteouaspa simple antes do símbolo.

  11. Tipos de Dados Symbols: (quotexyz) =>xyz ‘E => E

  12. Tipos de Dados String: Não é um tipo simples, ouseja, primitivocomoosanteriores, é compostapelacombinação de caracteres, sendoassimumaseqüência de caracteres de modoestruturado e entre aspasduplas “”.

  13. Tipos de Dados String: (string #\h #\e #\l #\l #\o) ) => "hello" "Hello, World!" => "Hello, World!"

  14. Tipos de Dados Vectors: São seqüênciascomo as Strings mas, seuselementospodem ser umaseqüência de qualquertipo e nãoapenas de caracteres. (vector 0 1 2 3 4) => #(0 1 2 3 4)

  15. Tipos de Dados Dotted pair: É composto de doisvaloresarbitrarios, sendo o primeirochamado de car e o segundo de cdr e suacombinação é realizada com a palavrareservadacons.

  16. Tipos de Dados Dotted pair: (cons 1 #t) => (1 . #t)

  17. Tipos de Dados List: Listaspodem ser construídassimplesmentecolocandoosvaloresdesejados entre parênteses e utilizandoaspa simple antes do primeiroparênteseouutilizando a palavrareservadalist. Listaspodemconterqualquer valor inclusive lista de lista.

  18. Tipos de Dados List: > ‘(2 4 6 8 10) => (2 4 6 8 10) > (list 2 4 6 8 10) => (2 4 6 8 10)

  19. Tipos de Dados List: Assimcomoemvetores, podemosutilizarcar e cdrparaacessarmos o 1º elemento e o restantedalistarespectivamente. > (car (list 2 4 6 8 10)) => 2

  20. Tipos de Dados List: > (cdr (list 2 4 6 8 10)) => (4 6 8 10) > (car (cdr (list 2 4 6 8 10))) => 4

  21. Tipos de Dados List: Podemosutilizarváriascombinações de car e cdr. > (cadr (list 2 4 6 8 10)) => 4 > (cddr (list 2 4 6 8 10)) => (6 8 10)

  22. Tipos de Dados List: (caarls) ; is the same as (car (car ls)) (cadrls) ; is the same as (car (cdrls)) (cdarls) ; is the same as (cdr (car ls)) (cddrls) ; is the same as (cdr (cdrls)) (caaarls) ; is the same as (car (car (car ls))) (caadrls) ; is the same as (car (car (cdrls))) (cadarls) ; is the same as (car (cdr (car ls))) (caddrls) ; is the same as (car (cdr (cdrls))) (cdaarls) ; is the same as (cdr (car (car ls))) (cdadrls) ; is the same as (cdr (car (cdrls))) (cddarls) ; is the same as (cdr (cdr (car ls))) (cdddrls) ; is the same as (cdr (cdr (cdrls)))

  23. Tipos de Dados List: (cadaarls) ; is the same as (car (cdr (car (car ls)))) (cadadrls) ; is the same as (car (cdr (car (cdrls)))) (caddarls) ; is the same as (car (cdr (cdr (car ls)))) (cadddrls) ; is the same as (car (cdr (cdr (cdrls)))) (cdaaarls) ; is the same as (cdr (car (car (car ls)))) (cdaadrls) ; is the same as (cdr (car (car (cdrls)))) (cdadarls) ; is the same as (cdr (car (cdr (car ls)))) (cddadrls) ; is the same as (cdr (cdr (car (cdrls)))) (cdddarls) ; is the same as (cdr (cdr (cdr (car ls)))) (cddddrls) ; is the same as (cdr (cdr (cdr (cdrls))))

  24. Expressões Condicionais Existemtrêstipos de expressõescondicionais: Usando a palavrareservadaIf. Usando a palavrareservadaCond. Usando a palavrareservadaCase.

  25. Expressões Condicionais ExpressãocondicionailIf : (if condição conseqüência alternativa) (if condição conseqüência)

  26. Expressões Condicionais ExpressãocondicionailIf : (if (< a b) (square a) (square b)) (if (< x1 x2) (> x2 x3) (if (> x1 x2) (< x2 x3) #f))

  27. Expressões Condicionais ExpressãocondicionailCond: (cond (condição1 conseqüência1) (condição2 conseqüência2) . . . (else alternativa))

  28. Expressões Condicionais ExpressãocondicionailCond: (cond ((> a b) (square a)) ((> b c) (square b)) . . . (else (square c)))

  29. Expressões Condicionais ExpressãocondicionailCase : (case arg expr1 expr2 expr3 ...)

  30. Expressões Condicionais ExpressãocondicionailCase : (case (+ 3 4) ((7) 'seven) ((2) 'two) (else 'nothing)) => seven

  31. Expressões Condicionais ExpressãocondicionailCase : (case 'a ((a b c d) 'first) ((e f g h) 'second) (else 'rest)) => first

  32. Operadores Lógicos Existemtrêstipos de expressõeslógicas: Usando a palavrareservadaAnd. Usando a palavrareservadaOr. Usando a palavrareservadaNot.

  33. Operadores Lógicos Expressõeslógica com And: (and expr1 expr2 ... exprn)

  34. Operadores Lógicos Expressõeslógica com And: (and (< 2 5) (< 2 4)) =>#t

  35. Operadores Lógicos Expressõeslógica com Or: (or expr1 expr2 ... exprn)

  36. Operadores Lógicos Expressõeslógica com Or: (or (< 2 5) (< 2 4)) =>#t

  37. Operadores Lógicos Expressõeslógica com Not: (not expr)

  38. Operadores Lógicos Expressõeslógica com Not: (not (< 5 10)) => #f

  39. Declarações Utilizamos a palavrareservadadefineparadeclararvariáveisglobais: (define a 10) a =>10

  40. Declarações Utilizamos a palavrareservadaset! Para alterarvariáveis: (define a 10) a =>10 (set! a 5) a => 5

  41. Declarações Podemosdeclarar procedures utilizando a palavrareservadadefineoulambda. Nãoexistediferença entre as declarações. (define square (lambda (x) (* x x)))

  42. Declarações Utilizando a palavrareservadadefine: (define (square x) (* x x)) (square 2) => 4

  43. Declarações Utilizando a palavrareservadalambda: (lambda formal-parâmetrosbody) (lambda (x) (* 2x) 5) => 10

  44. Declarações Utilizamos a palavrareservadalet e let* paracriarvariáveislocais. A diferença entre as duasdeclarações é que let* é um aninhamento de lets, ouseja, umavariáveldeclaradaem um let mais a esquerdapode ser usadaem um let mais a direita. (let ((var1 exp1) (var2 exp2) . . . (varn expn)) body)

  45. Declarações Utilizando a palavrareservadalet. (let ((x 2) (y 10)) (+ x y)) => 12 (let ((x 2) (y 10)) (/ y x)) => 5

  46. Declarações Utilizando a palavrareservadalet. (define x 10) (+ (let ((x 5)) (* x (+ x 2))) x) => 45 (define x 10) (let ((x 5) (y (* x 2))) (+ x y)) => 25

  47. Declarações Utilizando a palavrareservadalet*. (let* ((var1 exp1) (var2 exp2) . . . (varn expn)) body)

  48. Declarações O que é equivalente a: (let ((var1 expr1)) (let ((var2 expr2)) (let ... (let ((varnexprn)) body) ... )))

  49. Declarações Utilizando a palavrareservadalet*. (define x 10) (let* ((x 5) (y (* x 2))) (+ x y)) => 15

  50. Declarações Comparandolet 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

More Related