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

Ejecuta código Clojure online con SCI, el Small Clojure Interpreter: funciones, mapas, vectores, threading macros y secuencias perezosas, directamente en tu navegador.

ClojureScript via SCI (Scittle 0.8) · Se ejecuta en tu navegador, así que tu código nunca llega a nuestros servidores.
main.cljsClojure
Salida

            
        
Ctrl/⌘ + Enter para ejecutar

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

Escribe, ejecuta y prueba código Clojure online y gratis. Esta página funciona como IDE, editor de código, compilador e intérprete de Clojure 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: ClojureScript via SCI (Scittle 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.cljs 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 Clojure 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 compilador de Clojure online

  1. Escribe o pega código Clojure en el editor. Restablecer ejemplo recupera el programa inicial, con un factorial, una lista ordenada de mapas, frequencies y una canalización ->>.
  2. Pulsa Ejecutar o usa Ctrl + Enter (⌘ + Enter en Mac).
  3. El texto impreso con println aparece en el panel Salida. Después de la ejecución, el valor de la última forma se imprime como => ... en la forma legible de pr-str. Si ese valor es nil, por ejemplo cuando el programa termina con println, no se muestra nada más. Los errores se muestran con su mensaje.
  4. Elige un límite de tiempo de 5, 15 o 60 segundos, o pulsa Detener para terminar una ejecución antes.

En la primera ejecución la página descarga el intérprete, de aproximadamente 1 MB. Copiar y main.cljs guardan tu código, y A−/A+ cambian el tamaño del texto.

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

Sobre Clojure, ClojureScript y SCI

Clojure es un Lisp moderno construido en torno a estructuras de datos inmutables y la programación funcional. El Clojure original se ejecuta en la máquina virtual de Java, y ClojureScript es la versión que apunta a JavaScript. Esta página usa Scittle 0.8, que empaqueta SCI, el Small Clojure Interpreter, para el navegador. SCI interpreta tu código directamente con la semántica de ClojureScript, sin JVM ni herramienta de compilación.

Qué se admite

  • Definiciones y control de flujo: def, defn, fn y los literales #(...), let, if, when, cond y loop/recur.
  • Colecciones persistentes: mapas, vectores, conjuntos y listas, palabras clave y desestructuración en let y en los argumentos de funciones.
  • Funciones de secuencias, como map, filter, reduce, sort-by, group-by y frequencies, además de secuencias perezosas como range e iterate.
  • Macros de encadenamiento -> y ->>, y átomos para el estado mutable gestionado.
  • Interoperabilidad con JavaScript al estilo de ClojureScript, como en (js/Math.sqrt 16) o (.toUpperCase "abc").

Limitaciones:

  • Sin interoperabilidad con la JVM. Clases como java.util.Date o Thread no existen.
  • Sin Leiningen ni deps.edn. No se pueden añadir bibliotecas externas, así que solo están disponibles el código del editor y los espacios de nombres integrados.
  • Sin cuadro de entrada y sin DOM. Define tus datos de prueba en el programa.

Ejemplo práctico: inmutabilidad y encadenamiento

(def inventory {:apples 3 :pears 0})
(def restocked (assoc inventory :pears 12))
(println inventory)   ; {:apples 3, :pears 0}  (sin cambios)
(println restocked)   ; {:apples 3, :pears 12}

(def counter (atom 0))
(dotimes [_ 5] (swap! counter inc))
(println @counter)    ; 5

(->> [3 8 1 9 4]
     (filter odd?)
     (map #(* % 10))
     (reduce +))      ; => 130

assoc devuelve un mapa nuevo y deja el original sin cambios. Cuando necesitas un valor que cambie con el tiempo, guárdalo en un átomo y actualízalo con swap!. La última forma es una canalización ->>. Pasa el vector por cada paso como último argumento, y su resultado se imprime como => 130. Usa -> en su lugar cuando el valor deba ser el primer argumento, como ocurre con assoc y update en un mapa.

Diferencias con Clojure en la JVM y errores habituales

  • Los números son números de JavaScript. Con la semántica de ClojureScript no hay fracciones ni enteros grandes. (/ 1 3) devuelve 0.3333333333333333, y los enteros muy grandes pierden precisión.
  • No hay un tipo de carácter independiente. Un literal de carácter como \a es una cadena de una letra, así que (frequencies "mississippi") tiene claves de tipo cadena.
  • La pereza oculta los efectos secundarios. (map println xs) puede no imprimir nada si el resultado nunca se usa. Usa doseq o run! para los efectos secundarios.
  • Secuencias infinitas. (range) e iterate nunca terminan, así que limítalas siempre con take. Si imprimes una secuencia infinita, la ejecución continúa hasta que el límite de tiempo la detiene.
  • println frente a prn. println imprime las cadenas dentro de las colecciones sin comillas. prn conserva las comillas, lo que hace los datos más fáciles de leer.

Preguntas frecuentes

¿Esto es Clojure de verdad?

Es código Clojure ejecutado por SCI con la semántica de ClojureScript, no la implementación de la JVM. El lenguaje base, las colecciones y la biblioteca de secuencias funcionan igual, así que la mayor parte del código Clojure puro se ejecuta sin cambios. La interoperabilidad con Java y el comportamiento específico de la JVM no funcionan.

¿Puedo añadir bibliotecas o usar un archivo de proyecto?

No. Leiningen, deps.edn y las dependencias de Maven no están disponibles. Cada ejecución interpreta el único archivo del editor.

¿Por qué el archivo se llama main.cljs?

Porque el código se ejecuta con la semántica de ClojureScript. Puedes pegar el contenido en un archivo .clj o .cljc, siempre que no dependa de la interoperabilidad con JavaScript.

¿Qué otros lenguajes puedo probar?

El Intérprete de Scheme online es otro Lisp para explorar. Para JavaScript en sí, usa el Compilador de JavaScript online, o consulta todos los compiladores online.

Actualizado

Copiado al portapapeles