So verwenden Sie den Online-Scheme-Interpreter
- 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.
- Klicken Sie auf Ausführen oder drücken Sie Strg + Eingabetaste (auf dem Mac ⌘ + Eingabetaste).
- Mit
display,writeundnewlinegeschriebener Text erscheint im Bereich Ausgabe. Wenn das Programm beendet ist, wird der Wert des letzten Ausdrucks als=> Wertausgegeben, sofern dieser Wert nicht unspezifiziert ist. Fehler werden mit der eigenen Meldung von BiwaScheme gemeldet. - 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,beginundset!. - Listen und Funktionen höherer Ordnung:
cons,car,cdr,list,map,applyund quotierte Daten wie'(1 2 3). - Echte Endrekursion (Tail Calls), sodass Schleifen als benanntes
letoder 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,1als 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 Symbolenaundb, während(list a b)die Variablen auswertet. definevs.let. Eindefineauf oberster Ebene erzeugt einen globalen Namen.leterzeugt lokale Namen, die nur in seinem Rumpf existieren. In einem einfachenletkann sich eine Bindung nicht auf eine andere beziehen. Verwenden Sie daherlet*, wenn ein späterer Wert von einem früheren abhängt.displayvs.write.displaygibt Strings ohne Anführungszeichen aus.writebehält sie bei, was beim Debuggen von Daten hilft.- Gleichheit. Verwenden Sie
=für Zahlen,eq?für Symbole undequal?, 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