Scheme en ligne - IDE, éditeur, compilateur, interpréteur

RSS

Exécutez du code Scheme en ligne : définissez des fonctions, utilisez la récursivité, les listes, les lambdas et les appels terminaux dans un interpréteur Scheme qui tourne dans votre navigateur.

R7RS-style Scheme (BiwaScheme 0.8) · S'exécute dans votre navigateur : votre code n'atteint jamais nos serveurs.
main.scmScheme
Sortie

            
        
Ctrl/⌘ + Enter pour exécuter

Fonctionnalités du compilateur Scheme en ligne (IDE, éditeur & interpréteur)

Écrivez, exécutez et testez du code Scheme en ligne gratuitement. Cette page réunit un IDE Scheme en ligne, un éditeur de code, un compilateur et un interpréteur : saisissez votre code, cliquez sur Exécuter et voyez le résultat immédiatement. Tout s'exécute dans votre navigateur, sans rien à installer ni compte à créer.

  • Exécution instantanée : R7RS-style Scheme (BiwaScheme 0.8), avec un résultat en moins d'une seconde après le premier chargement.
  • Éditeur de code : coloration syntaxique, numéros de ligne, correspondance et fermeture automatique des parenthèses.
  • Erreurs claires : les messages d'erreur et avertissements s'affichent dans le panneau de sortie, comme sur votre propre ordinateur.
  • Plein écran : Ctrl/⌘ + Shift + F, taille de police réglable, disposition côte à côte ou empilée et panneaux redimensionnables.
  • Enregistrement automatique : votre code est conservé dans votre navigateur ; téléchargez-le sous main.scm ou copiez-le en un clic.
  • Expérimentez sans risque : une limite de temps et un bouton Arrêter interrompent les boucles infinies.
  • Confidentiel : l'environnement d'exécution Scheme tourne sur votre appareil : votre code n'est jamais envoyé.
  • Mode sombre et raccourcis clavier : Ctrl/⌘ + Enter exécute le code.
  • Gratuit : sans inscription, sans limite d'utilisation.

Découvrez d'autres langages de programmation

Comment utiliser l'interpréteur Scheme en ligne

  1. Écrivez ou collez du code Scheme dans l'éditeur. Réinitialiser l'exemple rétablit le programme de départ, qui affiche une factorielle, les dix premiers nombres de Fibonacci et une somme de carrés.
  2. Cliquez sur Exécuter ou utilisez Ctrl + Entrée (⌘ + Entrée sur un Mac).
  3. Le texte écrit avec display, write et newline apparaît dans le panneau Sortie. À la fin du programme, la valeur de la dernière expression est affichée sous la forme => valeur, sauf si cette valeur est non spécifiée. Les erreurs sont signalées avec le message propre à BiwaScheme.
  4. Choisissez une limite de temps de 5, 15 ou 60 secondes. Une boucle infinie est arrêtée automatiquement, et Arrêter met fin à une exécution immédiatement.

L'interpréteur ne pèse qu'environ 0,3 Mo, la page est donc prête presque instantanément. Copier et main.scm enregistrent votre programme, et Plein écran (Ctrl/⌘ + Maj + F, Échap pour quitter) donne toute la fenêtre à l'éditeur.

Votre code s'exécute dans un Web Worker à l'intérieur de votre navigateur et n'est jamais envoyé à un serveur. L'éditeur enregistre automatiquement votre dernier programme dans le stockage local de votre navigateur, séparément pour chaque compilateur de ce site.

À propos de Scheme et de BiwaScheme

Scheme est un petit dialecte de Lisp. Les programmes sont des expressions entre parenthèses, les fonctions sont des valeurs ordinaires et la récursivité est la façon normale de boucler. Son noyau minuscule en fait un langage d'enseignement très répandu pour les fermetures (closures), les fonctions d'ordre supérieur et les interpréteurs.

Cette page exécute BiwaScheme 0.8.3, un interpréteur Scheme écrit en JavaScript. Il suit dans son esprit les normes R6RS et R7RS et couvre les fonctionnalités Scheme les plus courantes. Ce n'est toutefois une implémentation complète d'aucune des deux normes.

Ce qui est pris en charge

  • Formes de base : define, lambda, let, let*, letrec, if, cond, begin et set!.
  • Listes et fonctions d'ordre supérieur : cons, car, cdr, list, map, apply et les données citées comme '(1 2 3).
  • Appels terminaux (tail calls) corrects, si bien que les boucles écrites avec un let nommé ou des fonctions récursives terminales s'exécutent avec une pile de taille constante.

Limites :

  • Pas de zone de saisie. Placez vos données de test directement dans le programme.
  • Pas une implémentation complète d'une norme. Les procédures propres à d'autres Scheme, comme MIT Scheme, Racket ou Guile, peuvent être absentes.
  • Seul le code de l'éditeur s'exécute. Il n'y a aucun fichier à charger et aucun gestionnaire de paquets.

Exemple pas à pas : récursivité et let nommé

;; Récursivité simple : chaque appel attend le retour du suivant.
(define (sum-list lst)
  (if (null? lst)
      0
      (+ (car lst) (sum-list (cdr lst)))))

;; Let nommé : une boucle récursive terminale avec un accumulateur.
(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 dernière expression n'est pas affichée, sa valeur apparaît donc sous la forme => 5000050000. sum-list accumule des additions en attente, tandis que sum-to appelle loop en position terminale et se comporte comme une boucle while.

Pièges courants

  • Oublier de citer (quote) une liste. (1 2 3) essaie d'appeler 1 comme une fonction et échoue. Écrivez '(1 2 3) ou (list 1 2 3). Les deux diffèrent : '(a b) est une liste des symboles a et b, alors que (list a b) évalue les variables.
  • define ou let. Un define de premier niveau crée un nom global. let crée des noms locaux qui n'existent que dans son corps. Dans un let simple, une liaison ne peut pas faire référence à une autre ; utilisez donc let* quand une valeur dépend d'une valeur précédente.
  • display ou write. display affiche les chaînes sans guillemets. write les conserve, ce qui aide à déboguer des données.
  • Égalité. Utilisez = pour les nombres, eq? pour les symboles et equal? pour comparer des listes ou des chaînes selon leur contenu.

Questions fréquentes

Est-ce un compilateur ou un interpréteur Scheme ?

Un interpréteur. BiwaScheme exécute votre programme directement dans le navigateur, sans étape de compilation séparée.

Quelle norme Scheme est prise en charge ?

BiwaScheme suit dans son esprit R6RS et R7RS et couvre les fonctionnalités les plus courantes. Le code type des manuels qui utilise define, lambda, let, cond, les listes et la récursivité s'exécute comme prévu. Le code qui dépend des bibliothèques d'une implémentation particulière peut nécessiter des modifications.

Puis-je l'utiliser pour SICP ou des exercices de cours ?

Oui, pour les exercices fondés sur le Scheme de base. Si un exercice utilise une procédure qui n'est pas définie, écrivez-en vous-même une petite version au début du programme.

Pourquoi mon programme n'affiche-t-il rien ?

Seuls display, write et newline produisent une sortie, ainsi que la ligne => pour la valeur de la dernière expression. Un programme qui se termine par un define n'affiche aucune valeur, car ce résultat est non spécifié.

Quels autres langages puis-je exécuter en ligne ?

Essayez le Compilateur Clojure en ligne pour un autre Lisp, le Compilateur Prolog en ligne pour la programmation logique, ou parcourez tous les compilateurs en ligne.

Mis à jour

Copié dans le presse-papiers