Scheme online - IDE, editor, compilador, interpretador

RSS

Execute código Scheme online: defina funções e use recursão, listas, lambdas e chamadas de cauda em um interpretador Scheme que roda no seu navegador.

R7RS-style Scheme (BiwaScheme 0.8) · Roda no seu navegador, então seu código nunca chega aos nossos servidores.
main.scmScheme
Saída

            
        
Ctrl/⌘ + Enter para executar

Recursos do compilador Scheme online (IDE, editor & interpretador)

Escreva, execute e teste código Scheme online de graça. Esta página funciona como IDE, editor de código, compilador e interpretador Scheme online, tudo em um: digite seu código, clique em Executar e veja a saída na hora. Tudo roda no seu navegador, sem nada para instalar e sem conta para criar.

  • Execute código na hora: R7RS-style Scheme (BiwaScheme 0.8), com saída em menos de um segundo após o primeiro carregamento.
  • Editor de código: realce de sintaxe, números de linha, correspondência de colchetes e fechamento automático de colchetes.
  • Erros claros: mensagens de erro e avisos aparecem no painel de saída, como apareceriam no seu próprio computador.
  • Tela cheia: Ctrl/⌘ + Shift + F, tamanho de fonte ajustável, layout lado a lado ou empilhado e painéis redimensionáveis.
  • Salvamento automático: seu código fica guardado no seu navegador; baixe-o como main.scm ou copie-o com um clique.
  • Seguro para experimentar: um limite de tempo e um botão Parar encerram loops infinitos.
  • Privado: o runtime Scheme roda no seu dispositivo, então seu código nunca é enviado.
  • Modo escuro e atalhos de teclado: Ctrl/⌘ + Enter executa o código.
  • Grátis: sem cadastro, sem limites de uso.

Aprenda outras linguagens de programação

Como usar o interpretador Scheme online

  1. Escreva ou cole o código Scheme no editor. Restaurar exemplo recupera o programa inicial, que imprime um fatorial, os dez primeiros números de Fibonacci e uma soma de quadrados.
  2. Pressione Executar ou use Ctrl + Enter (⌘ + Enter no Mac).
  3. O texto escrito com display, write e newline aparece no painel Saída. Quando o programa termina, o valor da última expressão é impresso como => valor, a menos que esse valor seja não especificado. Os erros são informados com a mensagem própria do BiwaScheme.
  4. Escolha um tempo limite de 5, 15 ou 60 segundos. Um laço infinito é interrompido automaticamente, e Parar encerra uma execução na hora.

O interpretador tem só cerca de 0,3 MB, então a página fica pronta quase de imediato. Copiar e main.scm salvam o seu programa, e Tela cheia (Ctrl/⌘ + Shift + F, Esc para sair) dá ao editor a janela inteira.

Seu código roda em um Web Worker dentro do seu navegador e nunca é enviado a um servidor. O editor salva automaticamente o seu último programa no armazenamento local do navegador, separadamente para cada compilador deste site.

Sobre o Scheme e o BiwaScheme

Scheme é um dialeto pequeno de Lisp. Os programas são expressões entre parênteses, as funções são valores comuns e a recursão é a forma normal de fazer repetições. O núcleo minúsculo o torna uma linguagem de ensino popular para closures, funções de ordem superior e interpretadores.

Esta página roda o BiwaScheme 0.8.3, um interpretador de Scheme escrito em JavaScript. Ele segue os padrões R6RS e R7RS no estilo e cobre os recursos mais comuns do Scheme. Mesmo assim, não é uma implementação completa de nenhum dos dois padrões.

O que é suportado

  • Formas básicas: define, lambda, let, let*, letrec, if, cond, begin e set!.
  • Listas e funções de ordem superior: cons, car, cdr, list, map, apply e dados com quote, como '(1 2 3).
  • Chamadas de cauda corretas (proper tail calls), então laços escritos como named let ou funções recursivas de cauda rodam em espaço constante de pilha.

Limitações:

  • Sem caixa de entrada. Coloque os dados de teste diretamente no programa.
  • Não é uma implementação completa do padrão. Procedimentos específicos de outros Schemes, como MIT Scheme, Racket ou Guile, podem não existir.
  • Só o código do editor é executado. Não há arquivos para carregar nem gerenciador de pacotes.

Exemplo prático: recursão vs named let

;; Recursão simples: cada chamada espera a próxima retornar.
(define (sum-list lst)
  (if (null? lst)
      0
      (+ (car lst) (sum-list (cdr lst)))))

;; Named let: um laço recursivo de cauda com um acumulador.
(define (sum-to n)
  (let loop ((i 1) (acc 0))
    (if (> i n)
        acc
        (loop (+ i 1) (+ acc i)))))

(display (sum-list '(1 2 3 4))) (newline)   ; 10
(sum-to 100000)                             ; => 5000050000

A última expressão não é exibida, então o valor dela aparece como => 5000050000. sum-list acumula somas pendentes, enquanto sum-to chama loop em posição de cauda e se comporta como um laço while.

Armadilhas comuns

  • Esquecer o quote de uma lista. (1 2 3) tenta chamar 1 como função e falha. Escreva '(1 2 3) ou (list 1 2 3). As duas formas são diferentes: '(a b) é uma lista dos símbolos a e b, enquanto (list a b) avalia as variáveis.
  • define vs let. Um define no nível superior cria um nome global. let cria nomes locais que existem apenas dentro do seu corpo. Dentro de um let simples, uma associação não pode se referir a outra, então use let* quando um valor posterior depende de um anterior.
  • display vs write. display imprime strings sem aspas. write as mantém, o que ajuda ao depurar dados.
  • Igualdade. Use = para números, eq? para símbolos e equal? para comparar listas ou strings pelo conteúdo.

Perguntas frequentes

Isto é um compilador ou um interpretador de Scheme?

Um interpretador. O BiwaScheme executa o seu programa diretamente no navegador, sem uma etapa de compilação separada.

Qual padrão de Scheme é suportado?

O BiwaScheme segue o R6RS e o R7RS no estilo e cobre os recursos mais comuns. Código padrão de livros didáticos que usa define, lambda, let, cond, listas e recursão roda como esperado. Código que depende das bibliotecas de uma implementação específica pode precisar de ajustes.

Posso usar para o SICP ou para exercícios de curso?

Sim, para exercícios baseados no Scheme básico. Se um exercício usa um procedimento que não está definido, escreva você mesmo uma versão pequena dele no início do programa.

Por que meu programa não imprime nada?

Só display, write e newline produzem saída, além da linha => com o valor da última expressão. Um programa que termina com um define não mostra valor, porque esse resultado é não especificado.

Que outras linguagens posso executar online?

Experimente o Compilador Clojure online para outro Lisp, o Compilador Prolog online para programação em lógica, ou veja todos os compiladores online.

Atualizado

Copiado para a área de transferência