Scheme online - IDE, editor, compilador, intérprete

Ejecuta código Scheme online: define funciones y usa recursión, listas, lambdas y llamadas de cola en un intérprete de Scheme que funciona en tu navegador.

R7RS-style Scheme (BiwaScheme 0.8) · Se ejecuta en tu navegador, así que tu código nunca llega a nuestros servidores.
main.scmScheme
Salida

            
        
Ctrl/⌘ + Enter para ejecutar

Funciones del compilador de Scheme online (IDE, editor & intérprete)

Escribe, ejecuta y prueba código Scheme online y gratis. Esta página funciona como IDE, editor de código, compilador e intérprete de Scheme online, todo en uno: escribe tu código, pulsa Ejecutar y verás el resultado al momento. Todo se ejecuta en tu navegador, sin nada que instalar ni cuentas que crear.

  • Ejecuta código al instante: R7RS-style Scheme (BiwaScheme 0.8), con resultados en menos de un segundo tras la primera carga.
  • Editor de código: resaltado de sintaxis, números de línea, emparejamiento de corchetes y cierre automático de corchetes.
  • Errores claros: los mensajes de error y las advertencias aparecen en el panel de salida, igual que en tu propio ordenador.
  • Pantalla completa: Ctrl/⌘ + Shift + F, tamaño de fuente ajustable, diseño en paralelo o apilado y paneles redimensionables.
  • Guardado automático: tu código se guarda en tu navegador; descárgalo como main.scm o cópialo con un clic.
  • Experimenta sin riesgo: un límite de tiempo y un botón Detener acaban con los bucles infinitos.
  • Privado: el entorno de ejecución de Scheme funciona en tu dispositivo, así que tu código nunca se sube.
  • Modo oscuro y atajos de teclado: Ctrl/⌘ + Enter ejecuta el código.
  • Gratis: sin registro y sin límites de uso.

Aprende otros lenguajes de programación

Cómo usar el intérprete de Scheme online

  1. Escribe o pega código Scheme en el editor. Restablecer ejemplo recupera el programa inicial, que imprime un factorial, los diez primeros números de Fibonacci y una suma de cuadrados.
  2. Pulsa Ejecutar o usa Ctrl + Enter (⌘ + Enter en Mac).
  3. El texto escrito con display, write y newline aparece en el panel Salida. Cuando el programa termina, el valor de la última expresión se imprime como => valor, salvo que ese valor no esté especificado. Los errores se muestran con el mensaje propio de BiwaScheme.
  4. Elige un límite de tiempo de 5, 15 o 60 segundos. Un bucle infinito se detiene automáticamente, y Detener termina una ejecución al instante.

El intérprete pesa solo unos 0,3 MB, así que la página está lista casi de inmediato. Copiar y main.scm guardan tu programa, y Pantalla completa (Ctrl/⌘ + Mayús + F, Esc para salir) da al editor toda la ventana.

Tu código se ejecuta en un Web Worker dentro de tu navegador y nunca se envía a un servidor. El editor guarda automáticamente tu último programa en el almacenamiento local de tu navegador, por separado para cada compilador de este sitio.

Sobre Scheme y BiwaScheme

Scheme es un dialecto pequeño de Lisp. Los programas son expresiones entre paréntesis, las funciones son valores normales y la recursión es la forma habitual de hacer bucles. Su núcleo diminuto lo convierte en un lenguaje muy usado para enseñar closures, funciones de orden superior e intérpretes.

Esta página ejecuta BiwaScheme 0.8.3, un intérprete de Scheme escrito en JavaScript. Sigue los estándares R6RS y R7RS en su estilo y cubre las características más habituales de Scheme. Aun así, no es una implementación completa de ninguno de los dos estándares.

Qué se admite

  • Formas básicas: define, lambda, let, let*, letrec, if, cond, begin y set!.
  • Listas y funciones de orden superior: cons, car, cdr, list, map, apply y datos entrecomillados como '(1 2 3).
  • Llamadas en cola correctas (proper tail calls), de modo que los bucles escritos como let con nombre o como funciones recursivas en cola se ejecutan con un uso constante de pila.

Limitaciones:

  • No hay cuadro de entrada. Pon los datos de prueba directamente en el programa.
  • No es una implementación estándar completa. Pueden faltar procedimientos específicos de otros Scheme, como MIT Scheme, Racket o Guile.
  • Solo se ejecuta el código del editor. No hay archivos que cargar ni gestor de paquetes.

Ejemplo práctico: recursión frente a let con nombre

;; Recursión simple: cada llamada espera a que vuelva la siguiente.
(define (sum-list lst)
  (if (null? lst)
      0
      (+ (car lst) (sum-list (cdr lst)))))

;; let con nombre: un bucle recursivo en cola con un 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

La última expresión no se muestra, así que su valor aparece como => 5000050000. sum-list acumula sumas pendientes, mientras que sum-to llama a loop en posición de cola y se comporta como un bucle while.

Errores habituales

  • Olvidar entrecomillar una lista. (1 2 3) intenta llamar a 1 como si fuera una función y falla. Escribe '(1 2 3) o (list 1 2 3). No son lo mismo: '(a b) es una lista de los símbolos a y b, mientras que (list a b) evalúa las variables.
  • define frente a let. Un define de nivel superior crea un nombre global. let crea nombres locales que solo existen dentro de su cuerpo. Dentro de un let simple, un enlace no puede referirse a otro, así que usa let* cuando un valor posterior dependa de uno anterior.
  • display frente a write. display imprime las cadenas sin comillas. write las conserva, lo que ayuda al depurar datos.
  • Igualdad. Usa = para números, eq? para símbolos y equal? para comparar listas o cadenas por su contenido.

Preguntas frecuentes

¿Esto es un compilador o un intérprete de Scheme?

Un intérprete. BiwaScheme ejecuta tu programa directamente en el navegador, sin un paso de compilación aparte.

¿Qué estándar de Scheme se admite?

BiwaScheme sigue R6RS y R7RS en su estilo y cubre las características más habituales. El código estándar de los libros de texto que usa define, lambda, let, cond, listas y recursión se ejecuta como se espera. El código que depende de las bibliotecas de una implementación concreta puede necesitar cambios.

¿Puedo usarlo para SICP o ejercicios de clase?

Sí, para ejercicios basados en el Scheme básico. Si un ejercicio usa un procedimiento que no está definido, escribe tú mismo una versión pequeña al principio del programa.

¿Por qué mi programa no imprime nada?

Solo display, write y newline producen salida, además de la línea => con el valor de la última expresión. Un programa que termina con un define no muestra ningún valor, porque ese resultado no está especificado.

¿Qué otros lenguajes puedo ejecutar online?

Prueba el Compilador de Clojure online para otro Lisp, el Compilador de Prolog online para programación lógica, o consulta todos los compiladores online.

Actualizado

Copiado al portapapeles