Scheme

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Scheme
Lambda lc.svg

Paradigma Multiparadigma: funcional e procedural
Surgido em 1975
Última versão R6RS (2007)
Versão em teste ()
Criado por Gerald Jay Sussman e Guy L. Steele, Jr.
Estilo de tipagem: dinâmica, forte
Compiladores MIT/GNU Scheme, Chez Scheme, SCM, GNU Guile, Ypsilon, PLT Scheme
Dialetos: T
Influenciada por ALGOL, Lisp, MDL
Influenciou Common Lisp, EuLisp, JavaScript, R, Ruby, Dylan, Lua, Hop, Racket
Licença:
Página oficial www.scheme-reports.org

Scheme é uma linguagem de programação multiparadigma que suporta programação funcional e procedural. Foi criada por Guy L. Steele e Gerald Jay Sussman no outono de 1975, a partir da linguagem Lisp com o intuito de estudar a teoria dos atores de Carl Hewitt. O modelo de Hewitt era orientado a objeto (e influenciado pelo Smalltalk). Os objetos eram chamados atores e as mensagens eram também atores. Sussman e Steele tiveram algum problema no entender algumas das conseqüências do modelo a partir dos artigos de Hewitt e decidiram construir uma implementação de brinquedo de uma linguagem de atores visando experimentá-la. Escreveram um pequeno interpretador Lisp e adicionaram os mecanismos necessários para a criação de atores e envio de mensagens[1]. Existem dois padrões que definem a linguagem Scheme: o padrão oficial IEEE e um padrão popular chamado "Revisedn Report on the Algorithmic Language Scheme", abreviado como RnRS, onde n é o número de revisões.

Índice

[editar] Características

Scheme adota uma filosofia minimalista, assim sendo, provê o mínimo de noções possíveis, e, na prática, qualquer outra noção pode ser adicionada via bibliotecas, como todos os dialetos do Lisp, possui pouca sintaxe comparado à maioria das outras linguagens. Devido à sua sintaxe completamete aninhada, não existem regras de precedência de operadores e sua notação parentizada é usada para todas as chamadas de função, desta forma não há ambigüidades como as que são encontradas nas linguagens de notação infixa.

(5+3)   seria assim:  (+ 5 3)     
(5+3)x2 seria assim:  (* (+ 5 3) 2)              
(8/2)   seria assim:  (/ 8 2)            

O MIT usou desde a década de 80 até 2008 a linguagem Scheme em seu curso introdutório de programação. O livro-texto usado na disciplina, "Structure and Interpretation of Computer Programs" (escrito por Gerald Sussman e Harold Abelson), ganhou notoriedade pela abordagem inovadora e pela incomum profundidade para um curso introdutório.

[editar] Exemplos de código em Scheme

[editar] Programa Olá Mundo

(define ola-mundo
  (lambda ()
    (display "Olá, Mundo!") 
    (newline)))
(ola-mundo)

ou, simplesmente:

(display "Olá, Mundo!")

[editar] Recursividade

Cálculo do fatorial de um número:

(define (fatorial n)
  (cond ((= n 0)  1)
    (else (* n (fatorial (- n 1))))))
 
(fatorial 5)
;; => 120

[editar] Números Perfeitos

Exemplo de programa que mostra os n primeiros números perfeitos:

 (define inverteListax
  (lambda (lista1 lista2)
    (if (null? lista1) lista2
        (inverteListax (cdr lista1) (cons (car lista1) lista2)))))
 
 (define inverteLista
   (lambda (lista)
     (inverteListax lista '())))
 
 (define (perf n)
    (let loop ((i 1)
                (sum 0))
       (cond ((= i n)
              (= sum n))
             (
                (= 0 (modulo n i))
                (loop (+ i 1) (+ sum i)))
             (else
              (loop (+ i 1) sum)))))
 
 (define aux
   (lambda (x n l)
     (if (= x 0) l
         (if (perf n) (aux (- x 1) (+ n 1) (cons n l))
                      (aux x (+ n 1) l)))))
 
 (define main
   (lambda (x)
     (aux x 1 '())))
 
 (define perfeitos
   (lambda (n)
     (inverteLista (main n))))

[editar] Compiladores

Alguns compiladores de Scheme:

  • Bigloo
  • Chez Scheme
  • Chicken
  • Gambit
  • Gauche
  • Guile
  • Ikarus
  • JScheme
  • Kawa
  • Larceny
  • MIT/GNU Scheme
  • Mosh
  • PLT Scheme
  • Pvts
  • RScheme
  • Scheme 48
  • SCM
  • SISC
  • Stalin
  • STk
  • STklos
  • TinyScheme
  • Ypsilon

Referências

  1. BERGIN, Thomas J.; GIBSON, Richard G.. History of Programming Languages II. New York: ACM Press, Addison-Wesley, 1996. 864 p. ISBN 0-201-89502-1

[editar] Bibliografia

DYBVIG, R. Kent. The Scheme Programming Language: Ansi Scheme. New Jersey: Prentice Hall PTR, 1996. ISBN 0-13-454646-6 ABELSON, Harold; SUSSMAN, Gerald Jay; SUSSMAN Julie. Structure and Interpretation of Computer Programs. New York: McGraw-Hill, 1996. ISBN 0-07-000484-6

[editar] Ver também

[editar] Ligações externas

Ícone de esboço Este artigo sobre Programação é um esboço. Você pode ajudar a Wikipédia expandindo-o.
Ferramentas pessoais
Espaços nominais

Variantes
Ações
Navegação
Colaboração
Imprimir/exportar
Ferramentas
Noutras línguas