Scheme online - IDE, Editor, Compiler, Interpreter

RSS

Führen Sie Scheme-Code online aus: Definieren Sie Funktionen und nutzen Sie Rekursion, Listen, Lambdas und Tail Calls in einem Scheme-Interpreter, der in Ihrem Browser läuft.

R7RS-style Scheme (BiwaScheme 0.8) · Läuft in Ihrem Browser – Ihr Code erreicht nie unsere Server.
main.scmScheme
Ausgabe

            
        
Ctrl/⌘ + Enter zum Ausführen

Funktionen des Online-Scheme-Compilers (IDE, Editor & Interpreter)

Schreiben, ausführen und testen Sie Scheme-Code kostenlos online. Diese Seite ist Online-Scheme-IDE, Code-Editor, Compiler und Interpreter in einem: Code eingeben, auf „Ausführen“ klicken und sofort die Ausgabe sehen. Alles läuft in Ihrem Browser – nichts zu installieren, kein Konto nötig.

  • Code sofort ausführen: R7RS-style Scheme (BiwaScheme 0.8), Ausgabe nach dem ersten Laden in weniger als einer Sekunde.
  • Code-Editor: Syntaxhervorhebung, Zeilennummern, Klammerzuordnung und automatisches Schließen von Klammern.
  • Klare Fehlermeldungen: Fehlermeldungen und Warnungen erscheinen im Ausgabebereich – genau wie auf Ihrem eigenen Computer.
  • Vollbild: Ctrl/⌘ + Shift + F, anpassbare Schriftgröße, Layout nebeneinander oder untereinander und skalierbare Bereiche.
  • Automatisches Speichern: Ihr Code bleibt in Ihrem Browser gespeichert; laden Sie ihn als main.scm herunter oder kopieren Sie ihn mit einem Klick.
  • Gefahrlos experimentieren: Ein Zeitlimit und eine Stopp-Schaltfläche beenden Endlosschleifen.
  • Privat: Die Scheme-Laufzeitumgebung läuft auf Ihrem Gerät, Ihr Code wird also nie hochgeladen.
  • Dunkelmodus und Tastenkürzel: Ctrl/⌘ + Enter führt den Code aus.
  • Kostenlos: keine Anmeldung, keine Nutzungslimits.

Weitere Programmiersprachen lernen

So verwenden Sie den Online-Scheme-Interpreter

  1. Schreiben oder fügen Sie Scheme-Code in den Editor ein. Beispiel zurücksetzen stellt das Startprogramm wieder her, das eine Fakultät, die ersten zehn Fibonacci-Zahlen und eine Quadratsumme ausgibt.
  2. Klicken Sie auf Ausführen oder drücken Sie Strg + Eingabetaste (auf dem Mac ⌘ + Eingabetaste).
  3. Mit display, write und newline geschriebener Text erscheint im Bereich Ausgabe. Wenn das Programm beendet ist, wird der Wert des letzten Ausdrucks als => Wert ausgegeben, sofern dieser Wert nicht unspezifiziert ist. Fehler werden mit der eigenen Meldung von BiwaScheme gemeldet.
  4. Wählen Sie ein Zeitlimit von 5, 15 oder 60 Sekunden. Eine Endlosschleife wird automatisch gestoppt, und mit Stopp beenden Sie einen Lauf sofort.

Der Interpreter ist nur etwa 0,3 MB groß, daher ist die Seite fast sofort einsatzbereit. Mit Kopieren und main.scm sichern Sie Ihr Programm, und Vollbild (Strg/⌘ + Umschalt + F, mit Esc verlassen) gibt dem Editor das ganze Fenster.

Ihr Code läuft in einem Web Worker in Ihrem Browser und wird nie an einen Server gesendet. Der Editor speichert Ihr letztes Programm automatisch im lokalen Speicher Ihres Browsers, für jeden Compiler dieser Website getrennt.

Über Scheme und BiwaScheme

Scheme ist ein kleiner Lisp-Dialekt. Programme bestehen aus geklammerten Ausdrücken, Funktionen sind gewöhnliche Werte, und Rekursion ist der übliche Weg für Schleifen. Der winzige Kern macht es zu einer beliebten Lehrsprache für Closures, Funktionen höherer Ordnung und Interpreter.

Diese Seite führt BiwaScheme 0.8.3 aus, einen in JavaScript geschriebenen Scheme-Interpreter. Er orientiert sich stilistisch an den Standards R6RS und R7RS und deckt die gängigsten Scheme-Funktionen ab. Eine vollständige Implementierung eines der beiden Standards ist er allerdings nicht.

Was unterstützt wird

  • Grundformen: define, lambda, let, let*, letrec, if, cond, begin und set!.
  • Listen und Funktionen höherer Ordnung: cons, car, cdr, list, map, apply und quotierte Daten wie '(1 2 3).
  • Echte Endrekursion (Tail Calls), sodass Schleifen als benanntes let oder endrekursive Funktionen mit konstantem Stapelspeicher laufen.

Einschränkungen:

  • Kein Eingabefeld. Schreiben Sie Testdaten direkt ins Programm.
  • Keine vollständige Standardimplementierung. Prozeduren, die es nur in anderen Scheme-Varianten wie MIT Scheme, Racket oder Guile gibt, können fehlen.
  • Es läuft nur der Code im Editor. Es gibt keine Dateien zum Laden und keinen Paketmanager.

Beispiel: Rekursion vs. benanntes let

;; Einfache Rekursion: Jeder Aufruf wartet darauf, dass der nächste zurückkehrt.
(define (sum-list lst)
  (if (null? lst)
      0
      (+ (car lst) (sum-list (cdr lst)))))

;; Benanntes let: eine endrekursive Schleife mit Akkumulator.
(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

Der letzte Ausdruck wird nicht angezeigt, sein Wert erscheint daher als => 5000050000. sum-list baut ausstehende Additionen auf, während sum-to loop in Endposition aufruft und sich wie eine while-Schleife verhält.

Häufige Stolperfallen

  • Eine Liste nicht quotiert. (1 2 3) versucht, 1 als Funktion aufzurufen, und scheitert. Schreiben Sie '(1 2 3) oder (list 1 2 3). Beides ist nicht dasselbe: '(a b) ist eine Liste aus den Symbolen a und b, während (list a b) die Variablen auswertet.
  • define vs. let. Ein define auf oberster Ebene erzeugt einen globalen Namen. let erzeugt lokale Namen, die nur in seinem Rumpf existieren. In einem einfachen let kann sich eine Bindung nicht auf eine andere beziehen. Verwenden Sie daher let*, wenn ein späterer Wert von einem früheren abhängt.
  • display vs. write. display gibt Strings ohne Anführungszeichen aus. write behält sie bei, was beim Debuggen von Daten hilft.
  • Gleichheit. Verwenden Sie = für Zahlen, eq? für Symbole und equal?, um Listen oder Strings inhaltlich zu vergleichen.

Häufig gestellte Fragen

Ist das ein Scheme-Compiler oder ein Interpreter?

Ein Interpreter. BiwaScheme führt Ihr Programm direkt im Browser aus, ohne separaten Kompilierschritt.

Welcher Scheme-Standard wird unterstützt?

BiwaScheme orientiert sich stilistisch an R6RS und R7RS und deckt die gängigsten Funktionen ab. Übliche Lehrbuchprogramme mit define, lambda, let, cond, Listen und Rekursion laufen wie erwartet. Code, der von den Bibliotheken einer bestimmten Implementierung abhängt, muss eventuell angepasst werden.

Kann ich es für SICP oder Kursaufgaben verwenden?

Ja, für Aufgaben, die auf dem Kern-Scheme aufbauen. Wenn eine Aufgabe eine Prozedur verwendet, die nicht definiert ist, schreiben Sie am Anfang des Programms eine kleine eigene Version davon.

Warum gibt mein Programm nichts aus?

Nur display, write und newline erzeugen eine Ausgabe, dazu die =>-Zeile für den Wert des letzten Ausdrucks. Ein Programm, das mit einem define endet, zeigt keinen Wert an, weil dieses Ergebnis unspezifiziert ist.

Welche anderen Sprachen kann ich online ausführen?

Probieren Sie den Online-Clojure-Compiler für einen weiteren Lisp-Dialekt, den Online-Prolog-Compiler für logische Programmierung oder stöbern Sie in allen Online-Compilern.

Aktualisiert

In die Zwischenablage kopiert