Schema (Programmiersprache)

Schema ist eine funktionelle Programmiersprache und einer der zwei Hauptdialekte des Programmiersprache-Lispelns. Verschieden vom Allgemeinen Lispeln, dem anderen Hauptdialekt, folgt Schema einer Minimalist-Designphilosophie, die einen kleinen Standardkern mit starken Werkzeugen für die Spracherweiterung angibt. Seine Kompaktheit und Anmut haben es populär bei Pädagogen, Sprachentwerfern, Programmierern, implementors, und Hobbyisten gemacht. Die verschiedene Bitte der Sprache wird als ein starker Punkt gesehen, obwohl die folglich breite Abschweifung zwischen Durchführungen als einer der schwachen Punkte der Sprache gesehen wird.

Schema wurde am Laboratorium von MIT AI von Guy L. Steele und Gerald Jay Sussman entwickelt, der es in die akademische Welt über eine Reihe von Merkzetteln, jetzt gekennzeichnet als die Lambda-Papiere, im Laufe der Periode 1975-1980 eingeführt hat. Die Schema-Sprache wird im offiziellen IEEE Standard standardisiert, und ein De-Facto-Standard hat den Revidierten Bericht über das Algorithmische Sprachschema (RnRS) genannt. Der am weitesten durchgeführte Standard ist R5RS (1998), und ein neuer normaler R6RS wurde 2007 bestätigt.

Schema war der erste Dialekt des Lispelns, um lexikalisches Spielraum und das erste zu wählen, um zu verlangen, dass Durchführungen Optimierung des Schwanz-Anrufs durchgeführt haben. Es war auch eine der ersten Programmiersprachen, um erstklassige Verlängerungen zu unterstützen. Es hatte einen bedeutenden Einfluss auf die Anstrengung, die zur Entwicklung seiner Schwester, Allgemeinen Lispelns geführt hat.

Geschichte

Ursprung

Schema hat als ein Versuch angefangen, das Schauspieler-Modell von Carl Hewitt zu verstehen, für den Zweck Steele und Sussman einem "winzigen Lispeln-Dolmetscher" das Verwenden von Maclisp und dann geschrieben haben, "hat Mechanismen hinzugefügt, um Schauspieler zu schaffen und Nachrichten zu senden." Schema wurde "Verschwörer", in der Tradition anderer Lispeln-abgeleiteter Sprachen wie Planner oder Conniver ursprünglich genannt. Der aktuelle Name hat sich aus dem Gebrauch der Autoren SEINES Betriebssystems ergeben, das Dateinamen auf zwei Bestandteile von höchstens sechs Charakteren jeder beschränkt hat. Zurzeit wird "Verschwörer" allgemein verwendet, um sich auf einen Schema-Programmierer zu beziehen.

R6RS

Ein neuer Sprachstandardisierungsprozess hat auf der 2003-Schema-Werkstatt mit der Absicht begonnen, einen R6RS Standard 2006 zu erzeugen. Dieser Prozess hat mit der früheren Annäherung von RnRS der Einmütigkeit Schluss gemacht.

R6RS zeigt ein Standardmodul-System, einen Spalt zwischen der Kernsprache und den Bibliotheken erlaubend. Mehrere Entwürfe der R6RS Spezifizierung, wurden die Endversion veröffentlicht, die R5.97RS ist. Eine erfolgreiche Stimme ist auf die Bestätigung des neuen Standards hinausgelaufen, hat am 28. August 2007 bekannt gegeben.

Zurzeit unterstützen die neuesten Ausgaben von verschiedenen Schema-Durchführungen, wie Ikarus, Diebstahl, Racket und Ypsilon, den R6RS Standard. Es gibt eine tragbare Bezugsdurchführung der vorgeschlagenen implizit aufeinander abgestimmten Bibliotheken für R6RS, genannt psyntax, der lädt und Stiefelstrippen selbst richtig auf verschiedenen älteren Schema-Durchführungen.

R6RS führt zahlreiche bedeutende Änderungen in die Sprache ein. Der Quellcode wird jetzt in Unicode angegeben, und eine große Teilmenge von Charakteren von Unicode kann jetzt in Schema-Symbolen und Bezeichnern erscheinen, und es gibt andere geringe Änderungen zu den lexikalischen Regeln. Charakter-Daten werden auch jetzt in Unicode angegeben. Viele Standardverfahren sind zu den neuen Standardbibliotheken bewegt worden, die selbst eine große Vergrößerung des Standards bilden, Verfahren und syntaktische Formen enthaltend, die früher nicht ein Teil des Standards waren. Ein neues Modul-System ist eingeführt worden, und Systeme für das Ausnahme-Berühren werden jetzt standardisiert. Syntax-Regeln sind durch eine ausdrucksvollere syntaktische Abstraktionsmöglichkeit (Syntax-Fall) ersetzt worden, der den Gebrauch vom ganzen Schema in der Makrovergrößerungszeit erlaubt. Entgegenkommende Durchführungen sind jetzt erforderlich, den vollen numerischen Turm des Schemas zu unterstützen, und die Semantik von Zahlen, ist hauptsächlich in der Richtung auf die Unterstützung für den IEEE 754 Standard ausgebreitet worden, um Punkt numerische Darstellung schwimmen zu lassen.

R7RS

Der R6RS Standard hat Meinungsverschiedenheit verursacht, weil, wie man sieht, es von der Minimalist-Philosophie abgewichen ist. Im August 2009 hat der Schema-Lenkungsausschuss, der den Standardisierungsprozess beaufsichtigt, seine Absicht bekannt gegeben zu empfehlen, Schema in zwei Sprachen zu spalten: Eine große moderne Programmiersprache für Programmierer und eine Teilmenge der großen Version, die den Minimalismus behält, der von Pädagogen und zufälligem implementors geschätzt ist; zwei Arbeitsgruppen wurden geschaffen, um an diesen zwei neuen Versionen des Schemas zu arbeiten. Die Schema-Berichtsprozess-Seite hat Verbindungen zu den Arbeitsgruppe-Urkunden, den öffentlichen Diskussionen und dem Problem-Verfolgen-System.

Unterscheidungsmerkmale

Schema ist in erster Linie eine funktionelle Programmiersprache. Es teilt viele Eigenschaften mit anderen Mitgliedern der Lispeln-Programmiersprache-Familie. Die sehr einfache Syntax des Schemas basiert auf S-Ausdrücken, parenthesized Listen, in denen einem Präfix-Maschinenbediener von seinen Argumenten gefolgt wird. Schema-Programme bestehen so aus Folgen von verschachtelten Listen. Listen sind auch die Hauptdatenstruktur im Schema, zu einer nahen Gleichwertigkeit zwischen Quellcode und Datenformaten (homoiconicity) führend. Schema-Programme können leicht schaffen und Stücke des Schema-Codes dynamisch bewerten.

Das Vertrauen auf Listen als Datenstrukturen wird durch alle Lispeln-Dialekte geteilt. Schema erbt einen reichen Satz von listenbearbeitenden Primitiven solcher als, und von seinen Lispeln-Vorfahren. Schema-Gebrauch ausschließlich, aber dynamisch getippte Variablen und Unterstützungen fungieren erster Klasse. So können Funktionen als Werte Variablen zugeteilt oder als Argumente für Funktionen passiert werden.

Diese Abteilung konzentriert sich hauptsächlich auf innovative Eigenschaften der Sprache einschließlich jener Eigenschaften, die unterscheiden, Lispelt das Schema von anderem. Wenn nicht festgesetzt, sonst beziehen sich Beschreibungen von Eigenschaften auf den R5RS Standard.

In Beispielen, die in dieser Abteilung, die Notation "===> zur Verfügung gestellt sind, wird Ergebnis" verwendet, um das Ergebnis anzuzeigen, den Ausdruck auf der sofort vorhergehenden Linie zu bewerten. Das ist dieselbe in R5RS verwendete Tagung.

Grundsätzliche Designeigenschaften

Dieser Paragraph beschreibt jene Eigenschaften des Schemas, die es aus anderen Programmiersprachen von seinen frühsten Tagen unterschieden haben. Das sind die Aspekte des Schemas, die am stärksten jedes Produkt der Schema-Sprache beeinflussen, und sie die Aspekte sind, die alle Versionen der Schema-Programmiersprache von 1973 vorwärts teilen.

Minimalismus

Schema ist eine sehr einfache Sprache, viel leichter durchzuführen als jede andere Sprache der vergleichbaren ausdrucksvollen Macht. Diese Bequemlichkeit ist dem Gebrauch der Lambda-Rechnung zuzuschreibend, um viel von der Syntax der Sprache von primitiveren Formen abzuleiten. Zum Beispiel der 23 s-expression-based syntaktischen Konstruktionen, die im R5RS Schema-Standard, 11 definiert sind, werden wie abgeleitet, oder Bibliotheksformen klassifiziert, die als Makros geschrieben werden können, die grundsätzlichere Formen, hauptsächlich Lambda einschließen. Wie R5RS sagt (R5RS sec. 3.1): "Die grundsätzlichste von den variablen verbindlichen Konstruktionen ist der Lambda-Ausdruck, weil alle anderen variablen verbindlichen Konstruktionen in Bezug auf Lambda-Ausdrücke erklärt werden können."

: Grundsätzliche Formen: Definieren Sie Lambda, wenn, Zitat, Ende des Zitats, Ende des Zitats spleißend, Quasizitat, Definieren-Syntax, lassen Syntax, Letrec-Syntax, Syntax-Regeln, Satz!

: Bibliotheksformen: Tun Sie, lassen Sie, lassen Sie *, letrec, cond, Fall, und, oder, beginnen Sie, genannt lassen, verzögern

Beispiel: Ein Makro, um als ein Ausdruck-Verwenden durchzuführen, um die Variable bindings durchzuführen.

(Definieren-Syntax hat gelassen

(Syntax-Regeln

((lassen ((var expr)...) Körper...)

((Lambda (var...) Körper...) expr...))))

</syntaxhighlight>

So würde das Verwenden, wie definiert, über einer Schema-Durchführung ""als"" umschreiben, der die Aufgabe der Durchführung auf dieses des Codierens des Verfahrens instantiations reduziert.

1998 haben Sussman und Steele bemerkt, dass der Minimalismus des Schemas nicht eine bewusste Designabsicht, aber eher das unbeabsichtigte Ergebnis des Designprozesses war. "Wir versuchten wirklich, etwas Kompliziertes und Entdecktes, serendipitously zu bauen, dass wir etwas zufällig entworfen hatten, was alle unsere Absichten entsprochen hat, aber viel einfacher war, als wir bestimmt hatten...., dass wir begriffen haben, dass die Lambda-Rechnung — ein kleiner, einfacher Formalismus — als der Kern einer starken und ausdrucksvollen Programmiersprache dienen konnte."

Lexikalisches Spielraum

Wie die meisten modernen Programmiersprachen und Lispelt unterschiedlich früher wie Maclisp oder Emacs Lisp, Schema ist lexikalisch scoped: Die ganze mögliche Variable bindings in einer Programm-Einheit kann durch das Lesen des Textes der Programm-Einheit ohne Rücksicht der Zusammenhänge analysiert werden, in denen es genannt werden kann.

Das hebt sich von dynamischem scoping ab, der für frühe Lispeln-Dialekte wegen der in einer Prozession gehenden Kosten charakteristisch war, die mit den primitiven Textersatz-Methoden vereinigt sind, die verwendet sind, um lexikalische scoping Algorithmen in Bearbeitern und Dolmetschern des Tages durchzuführen. In denjenigen Lispelt, es war für eine Verweisung auf eine freie Variable innerhalb eines Verfahrens vollkommen möglich, sich auf den ziemlich verschiedenen bindings äußerlich zum Verfahren abhängig vom Zusammenhang des Anrufs zu beziehen.

Der Impuls, um sich zu vereinigen, wie, am Anfang der 1970er Jahre, eines ungewöhnlichen scoping Modells in ihre neue Version des Lispelns war, ist aus den Studien von Sussman des Algols gekommen. Er hat vorgeschlagen, dass EINEM ALGOL ähnliche lexikalische scoping Mechanismen helfen würden, ihre anfängliche Absicht zu begreifen, das Schauspieler-Modell von Hewitt im Lispeln durchzuführen.

Die Schlüsseleinblicke darauf, wie man lexikalischen scoping in einen Lispeln-Dialekt einführt, wurden in Sussmans 1975-Lambda-Zeitung und Steeles, "Schema verbreitet: Ein Dolmetscher für die Verlängerte Lambda-Rechnung", wo sie das Konzept des lexikalischen Verschlusses angenommen haben, der in einem AI Merkzettel 1970 von Joel Moses beschrieben worden war, der die Idee Peter J. Landin zugeschrieben hat.

Lambda-Rechnung

Alonzos mathematische Notation der Kirche, die Lambda-Rechnung, hat den Gebrauch des Lispelns "des Lambdas" als ein Schlüsselwort begeistert, für ein Verfahren einzuführen, sowie die Entwicklung von funktionellen Programmiertechniken zu beeinflussen, die mit dem Gebrauch von höherwertigen Funktionen im Lispeln verbunden sind. Aber Lispelt früh waren nicht passende Ausdrücke der Lambda-Rechnung wegen ihrer Behandlung von freien Variablen.

Die Einführung des lexikalischen Spielraums hat das Problem durch das Bilden einer Gleichwertigkeit zwischen einigen Formen der Lambda-Notation und ihres praktischen Ausdrucks auf einer Arbeitsprogrammiersprache aufgelöst. Sussman und Steele haben gezeigt, dass die neue Sprache verwendet werden konnte, um die ganze befehlende und Aussagesemantik anderer Programmiersprachen einschließlich ALGOL und Fortran elegant abzuleiten, und das dynamische Spielraum von anderem, durch das Verwenden von Lambda-Ausdrücken nicht als einfaches Verfahren instantiations, aber als "Kontrollstrukturen und Umgebungsmodifikatoren Lispelt." Sie haben Verlängerung passierenden Stil zusammen mit ihrer ersten Beschreibung des Schemas in der ersten von den Lambda-Zeitungen eingeführt, und in nachfolgenden Zeitungen sind sie fortgefahren, die rohe Macht dieses praktischen Gebrauches der Lambda-Rechnung zu demonstrieren.

Block-Struktur

Schema erbt seine Block-Struktur vom früheren Block hat Sprachen, besonders Algol strukturiert. Im Schema werden Blöcke durch drei verbindliche Konstruktionen durchgeführt: und. Zum Beispiel schafft die folgende Konstruktion einen Block, in dem ein genanntes Symbol zur Nummer 10 gebunden wird:

(definieren Sie var "Gans")

; Jede Verweisung auf var hier wird zur "Gans" gebunden

(lassen Sie ((var 10))

;; Behauptungen gehen hier. Jede Verweisung auf var hier wird zu 10 gebunden.

)

; Jede Verweisung auf var hier wird zur "Gans" gebunden</syntaxhighlight>

Blöcke können verschachtelt werden, um willkürlich komplizierte Block-Strukturen gemäß dem Bedürfnis nach dem Programmierer zu schaffen. Der Gebrauch der Block-Strukturierung, um lokalen bindings zu schaffen, erleichtert die Gefahr der namespace Kollision, die sonst vorkommen kann.

Eine Variante dessen erlaubt bindings, sich auf Variablen definiert früher in derselben Konstruktion so zu beziehen:

(let* ((var1 10)

(var2 (+ var1 12)))

;; aber die Definition von var1 konnte sich auf var2 nicht beziehen

)</syntaxhighlight>

Die andere Variante wird entworfen, um gegenseitig rekursiven Verfahren zu ermöglichen, zu einander gebunden zu werden.

; Tabellarisierung der männlichen und weiblichen Folgen von Hofstadter

(letrec ((Frau (Lambda (n)

(wenn (= n 0) 1

(-n (Mann (Frau (-n 1)))))))

(Mann (Lambda (n)

(wenn (= n 0) 0

(-n (Frau (Mann (-n 1))))))))

(zeigen Sie "mich Mann (i) Frau (i)") (newline)

(tun Sie ((ich 0 (+ ich 1)))

((> ich 8) #f)

(zeigen Sie i) (Anzeige "") (Anzeige (Mann i)) (Anzeige "") (Anzeige (Frau i))

(newline)))

</syntaxhighlight>

(Sieh die männlichen und weiblichen Folgen von Hofstadter für die Definitionen, die in diesem Beispiel verwendet sind)

Alle in einer Single gebundenen Verfahren können sich auf einander namentlich, sowie auf Werte von Variablen definiert früher in demselben beziehen, aber sie können sich auf Werte definiert später in demselben nicht beziehen.

Eine Variante, die "genannte gelassene" Form, hat einen Bezeichner nach dem Schlüsselwort. Das bindet die gelassenen Variablen zum Argument eines Verfahrens, dessen Name der gegebene Bezeichner ist, und dessen Körper der Körper der gelassenen Form ist. Der Körper, kann wie gewünscht, durch das Benennen des Verfahrens wiederholt werden. Die genannten lassen wird weit verwendet, um Wiederholung durchzuführen.

Beispiel: ein einfacher Schalter

(lassen Sie Schleife ((n 1))

(wenn (

Wie jedes Verfahren im Schema hat das im genannten geschaffene Verfahren gelassen ist ein Gegenstand der ersten Klasse.

Richtiger Schwanz recursion

Schema hat eine Wiederholungskonstruktion, aber es ist im Schema idiomatischer, Schwanz recursion zu verwenden, um Wiederholung auszudrücken. Standardanpassende Schema-Durchführungen sind erforderlich, Schwanz-Anrufe zu optimieren, um eine unbegrenzte Zahl von aktiven Schwanz-Anrufen zu unterstützen (R5RS sec. 3.5) — ein Eigentum beschreibt der Schema-Bericht als richtiger Schwanz recursion — das Bilden davon sicher für Schema-Programmierer, wiederholende Algorithmen mit rekursiven Strukturen zu schreiben, die manchmal intuitiver sind. Schwanz rekursive Verfahren und die genannte Form stellt Unterstützung für die Wiederholung mit dem Schwanz recursion zur Verfügung.

; Tabellarisierung von Quadraten von 0 bis 9:

; Zeichen: Schleife ist einfach ein willkürliches als ein Etikett verwendetes Symbol. Jedes Symbol wird tun.

(lassen Sie Schleife ((ich 0))

(wenn (nicht (= ich 10))

(beginnen Sie

(zeigen Sie i) (Anzeige "quadratisch gemacht =") (Anzeige (* ich i)) (newline)

(Schleife (+ ich 1)))))

</syntaxhighlight>

Erstklassige Verlängerungen

Verlängerungen im Schema sind erstklassige Gegenstände. Schema stellt das Verfahren zur Verfügung (auch bekannt als) die aktuelle Verlängerung durch das Einpacken davon als ein Flucht-Verfahren zu gewinnen, das zu einem formellen Argument in einem vom Programmierer zur Verfügung gestellten Verfahren gebunden ist. (R5RS sec. 6.4) Erstklassige Verlängerungen ermöglichen dem Programmierer, nichtlokale Kontrollkonstruktionen wie iterators, Koroutinen und das Zurückverfolgen zu schaffen.

Das folgende Beispiel, ein Rätsel eines traditionellen Programmierers, zeigt, dass Schema Verlängerungen so erstklassige Gegenstände behandeln kann, sie zu Variablen bindend und ihnen passierend, wie Argumente für Verfahren.

(let* ((Yin

((Lambda (Cc) (zeigen) Cc) (Anruf mit der aktuellen Verlängerung (Lambda (c) c))))

(yang

((Lambda (Cc) (zeigen "*") Cc) (Anruf mit der aktuellen Verlängerung (Lambda (c) c)))))

(Yin yang))

</syntaxhighlight>

Wenn durchgeführt, zeigt dieser Code eine Zählen-Folge: "@*@**@***@****@*****@******@*******@********..."

Geteilter namespace für Verfahren und Variablen

Im Gegensatz zum Allgemeinen Lispeln teilen alle Daten und Verfahren im Schema einen allgemeinen namespace, wohingegen in allgemeinen Lispeln-Funktionen und Daten getrennten namespaces das Bilden davon möglich für eine Funktion und eine Variable haben, um denselben Namen und das Verlangen der speziellen Notation zu haben, für eine Funktion als ein Wert zu kennzeichnen. Das ist manchmal als "Lisp-1/Lisp-2" Unterscheidung bekannt, sich auf den vereinigten namespace des Schemas und den getrennten namespaces des Allgemeinen Lispelns beziehend.

Im Schema können dieselben Primitiven, die verwendet werden, um Daten zu manipulieren und zu binden, verwendet werden, um Verfahren zu binden. Es gibt keine Entsprechung vom Allgemeinen Lispeln, und

; Variable hat zu einer Zahl gebunden:

(definieren Sie f 10)

f

> 10

; Veränderung (den bestimmten Wert verändernd)

,

(Satz! f (+ f f 6))

> 26

; Das Zuweisen eines Verfahrens zu derselben Variable:

(Satz! f (Lambda (n) (+ n 12)))

(f 6)

> 18

; Das Zuweisen des Ergebnisses eines Ausdrucks zu derselben Variable:

(Satz! f (f 1))

f

> 13

; funktionelle Programmierung:

(wenden Sie sich +' (1 2 3 4 5 6))

> 21

(Satz! f (Lambda (n) (+ n 100)))

(Karte f' (1 2 3))

> (101 102 103)

</syntaxhighlight>

Durchführungsstandards

Diese Paragraph-Dokumentendesignentscheidungen, die im Laufe der Jahre genommen worden sind, die Schema einen besonderen Charakter gegeben haben, aber sind nicht die direkten Ergebnisse des ursprünglichen Designs.

Numerischer Turm

Schema gibt einen verhältnismäßig vollen Satz von numerischem datatypes einschließlich komplizierter und vernünftiger Typen an, der im Schema als der numerische Turm bekannt ist (R5RS sec. 6.2). Der Standard behandelt diese als Abstraktionen, und begeht den implementor zu einer Einzelheit innere Darstellungen nicht.

Zahlen können die Qualität der Genauigkeit haben. Eine genaue Zahl kann nur durch eine Folge von genauen Operationen erzeugt werden, die mit anderen genauen Zahlen verbunden sind — Ungenauigkeit ist so ansteckend. Der Standard gibt an, dass irgendwelche zwei Durchführungen gleichwertige Ergebnisse für alle Operationen erzeugen müssen, die auf genaue Zahlen hinauslaufen.

Der R5RS Standard gibt Verfahren an, und der verwendet werden kann, um die Genauigkeit einer Zahl zu ändern. erzeugt "die genaue Zahl, die am Argument numerisch am nächsten ist." erzeugt "die ungenaue Zahl, die am Argument numerisch am nächsten ist". Der R6RS Standard lässt diese Verfahren aus dem Hauptbericht weg, aber gibt sie als R5RS Vereinbarkeitsverfahren in der Standardbibliothek (rnrs r5rs (6)) an.

Am R5RS Standard sind Schema-Durchführungen nicht erforderlich, den ganzen numerischen Turm durchzuführen, aber sie müssen "eine zusammenhängende Teilmenge durchführen, die sowohl mit den Zwecken der Durchführung als auch mit dem Geist der Schema-Sprache im Einklang stehend ist" (R5RS sec. 6.2.3). Der neue R6RS Standard verlangt wirklich Durchführung des ganzen Turms, und "genaue Gegenstände der ganzen Zahl und genaue Gegenstände der rationalen Zahl der praktisch unbegrenzten Größe und Präzision, und bestimmte Verfahren einzusetzen..., so geben sie immer genaue Ergebnisse, wenn gegeben, genaue Argumente zurück" (R6RS sec. 3.4, sec. 11.7.1).

Beispiel 1: Die genaue Arithmetik in einer Durchführung, die genauen unterstützt

vernünftige komplexe Zahlen.

; Summe von drei vernünftigen reellen Zahlen und zwei vernünftigen komplexen Zahlen

(definieren Sie x (+ 1/3 1/4 - 1/5 - 1/3i 405/50+2/3i))

x

> 509/60+1/3i

; Überprüfen Sie für die Genauigkeit.

(genau? x)

>

#t </syntaxhighlight>

Beispiel 2: Dieselbe Arithmetik in einer Durchführung, die keinen genauen unterstützt

rationale Zahlen noch komplexe Zahlen, aber akzeptieren wirklich reelle Zahlen in der vernünftigen Notation.

; Summe von vier vernünftigen reellen Zahlen

(definieren Sie xr (+ 1/3 1/4 - 1/5 405/50))

; Summe von zwei vernünftigen reellen Zahlen

(definieren Sie xi (+-1/3 2/3))

xr

> 8.48333333333333

xi

> 0.333333333333333

; Überprüfen Sie für die Genauigkeit.

(genau? xr)

>

#f

(genau? xi)

> #f

</syntaxhighlight>

Beide Durchführungen passen sich dem R5RS Standard an, aber das zweite passt sich R6RS nicht an, weil es den vollen numerischen Turm nicht durchführt.

Verzögerte Einschätzung

Schema unterstützt verzögerte Einschätzung durch die Form und das Verfahren.

(definieren Sie eval-aplus2 (Verzögerung (+ 2)))

(Satz! 20)

(zwingen Sie eval-aplus2)

> 22

(definieren Sie eval-aplus50 (Verzögerung (+ 50)))

(lassen Sie ((a 8))

(zwingen Sie eval-aplus50))

> 70

(Satz! 100)

(zwingen Sie eval-aplus2)

> 22

</syntaxhighlight>

Der lexikalische Zusammenhang der ursprünglichen Definition der Versprechung wird bewahrt, und sein Wert wird auch bewahrt nach dem ersten Gebrauch wird Die Versprechung nur jemals einmal bewertet.

Diese Primitiven, die erzeugen oder als Versprechungen bekannte Werte behandeln, können verwendet werden, um fortgeschrittene faule Einschätzungskonstruktionen wie Ströme durchzuführen.

Im R6RS Standard sind diese nicht mehr Primitive, aber werden stattdessen als ein Teil der R5RS Vereinbarkeitsbibliothek (rnrs r5rs (6)) zur Verfügung gestellt.

In R5RS, einer angedeuteten Durchführung dessen und wird gegeben, die Versprechung als ein Verfahren ohne Argumente (ein thunk) und mit memoization durchführend, um sicherzustellen, dass es nur jemals bewertet wird, sobald, ohne Rücksicht auf die Zahl von Zeiten genannt wird (R5RS sec. 6.4).

SRFI 41 ermöglicht den Ausdruck sowohl von begrenzten als auch von unendlichen Folgen mit der außergewöhnlichen Wirtschaft. Zum Beispiel ist das eine Definition der fibonacci Folge mit den Funktionen, die in SRFI 41 definiert sind:

; Definieren Sie die Folge von Fibonacci:

(definieren Sie Flunkereien

(Strom - lernt 0

(Strom - lernt 1

(Strom-Karte +

Flunkereien

(Flunkereien des Stroms-cdr)))))

; Schätzen Sie die hundertste Zahl in der Folge:

(Strom - bezüglich Flunkereien 99)

> 218922995834555169026

</syntaxhighlight>

Ordnung der Einschätzung von Verfahren-Argumenten

Die meisten Lispeln geben eine Ordnung der Einschätzung für Verfahren-Argumente an. Schema tut nicht. Die Ordnung der Einschätzung — einschließlich der Ordnung, in der der Ausdruck in der Maschinenbediener-Position bewertet wird — kann durch eine Durchführung auf einer Anruf-für-Anruf-Basis gewählt werden, und die einzige Einschränkung besteht darin, dass "die Wirkung jeder gleichzeitigen Einschätzung des Maschinenbedieners und der operand Ausdrücke beschränkt wird, mit einer folgenden Ordnung der Einschätzung im Einklang stehend zu sein." (R5RS sec. 4.1.3)

(lassen Sie ((ev (Lambda (n) (Anzeige "das Auswerten")

(Anzeige (wenn (Verfahren? n) "Verfahren" n))

(newline) n)))

((ev +) (ev 1) (ev 2)))

> 3

</syntaxhighlight>

ev ist ein Verfahren, das das Argument beschreibt, ist dazu gegangen, gibt dann den Wert des Arguments zurück. Im Vergleich mit anderem Lispelt, das Äußere eines Ausdrucks in der Maschinenbediener-Position (der erste Artikel) eines Schema-Ausdrucks ist ziemlich gesetzlich, so lange das Ergebnis des Ausdrucks in der Maschinenbediener-Position ein Verfahren ist.

Im Benennen des Verfahrens "+", um 1 und 2 beizutragen, können die Ausdrücke (ev +), (ev 1) und (ev 2) in jeder Ordnung bewertet werden, so lange die Wirkung nicht darin besteht, als ob sie in der Parallele bewertet wurden. So können die folgenden drei Linien in jeder Ordnung durch das Standardschema gezeigt werden, wenn der obengenannte Beispiel-Code durchgeführt wird, obwohl der Text einer Linie mit einem anderen nicht durchgeschossen werden darf, weil das die folgende Einschätzungseinschränkung verletzen würde.

: Das Auswerten von 1

: Das Auswerten von 2

: Das Auswerten des Verfahrens

Hygienische Makros

Der R5RS Standard hat ein starkes hygienisches Makrosystem eingeführt, das dem Programmierer erlaubt, neue syntaktische Konstruktionen zur Sprache mit einem einfachen Muster hinzuzufügen, das Subsprache (R5RS sec 4.3) vergleicht. Davor war das hygienische Makrosystem zu einem Anhang des R4RS Standards, als ein "hohes" System neben einer "niedrigen Stufe" Makrosystem verbannt worden, von denen beide als Erweiterungen behandelt wurden, um aber nicht ein wesentlicher Teil der Sprache Zu intrigieren.

Durchführungen des hygienischen Makrosystems, auch genannt, sind erforderlich, den lexikalischen scoping des Rests der Sprache zu respektieren. Das wird durch das spezielle Namengeben und die Scoping-Regeln für die Makrovergrößerung gesichert, und vermeidet allgemeine Programmierfehler, die in den Makrosystemen anderer Programmiersprachen vorkommen können. R6RS gibt ein hoch entwickelteres Transformationssystem an, der als eine Spracherweiterung auf das R5RS Schema für einige Zeit verfügbar gewesen ist.

; Definieren Sie ein Makro, um eine Variante "wenn" mit einem Mehrausdruck durchzuführen

; wahrer Zweig und kein falscher Zweig.

(Definieren-Syntax wenn

(Syntax-Regeln

((wenn pred exp exps...)

(wenn pred (beginnen exp exps...)))))

</syntaxhighlight>

So kann die Syntax des Schemas leicht erweitert werden.

Beschwörungen von Makros und Verfahren haben eine nahe Ähnlichkeit — beide sind S-Ausdrücke — aber sie werden verschieden behandelt. Wenn der Bearbeiter auf einen S-Ausdruck im Programm stößt, überprüft er zuerst, um zu sehen, ob das Symbol als ein syntaktisches Schlüsselwort innerhalb des aktuellen lexikalischen Spielraums definiert wird. Wenn so, es versucht dann, das Makro auszubreiten, die Sachen im Schwanz des S-Ausdrucks als Argumente behandelnd, ohne Code zu kompilieren, um sie zu bewerten, und dieser Prozess wird rekursiv wiederholt, bis keine Makrobeschwörungen bleiben. Wenn es nicht ein syntaktisches Schlüsselwort ist, kompiliert der Bearbeiter Code, um die Argumente im Schwanz des S-Ausdrucks zu bewerten und dann die Variable zu bewerten, die durch das Symbol an der Spitze des S-Ausdrucks vertreten ist und es zu nennen, weil ein Verfahren mit den bewerteten Schwanz-Ausdrücken als wirkliche Argumente dafür gegangen ist.

Die meisten Schema-Durchführungen stellen auch zusätzliche Makrosysteme zur Verfügung. Unter populären sind syntaktische Verschlüsse, ausführliche Umbenennungsmakros und, ein nichthygienisches Makrosystem, das dem im allgemeinen Lispeln zur Verfügung gestellten System ähnlich ist.

Umgebungen und eval

Vor R5RS hatte Schema keine Standardentsprechung vom Verfahren, das in anderem allgegenwärtig ist, Lispelt, obwohl das erste Lambda-Papier als "ähnlich der LISPELN-Funktion beschrieben hatte, durch die EVAL" und der erste Revidierte Bericht 1978 das ersetzt haben, der zwei Argumente genommen hat. Die zweiten, dritten und vierten revidierten Berichte haben jede Entsprechung davon weggelassen.

Der Grund für diese Verwirrung besteht darin, dass im Schema mit seinem lexikalischen scoping das Ergebnis, einen Ausdruck zu bewerten, abhängt, wo es bewertet wird. Zum Beispiel ist es nicht klar, ob das Ergebnis, den folgenden Ausdruck zu bewerten, 5 oder 6 sein sollte:

(lassen Sie ((Name '+))

(lassen Sie ((+ *))

(bewerten Sie (Listenname 2 3))))

</syntaxhighlight>

Wenn es in der Außenumgebung bewertet wird, wo definiert wird, ist das Ergebnis die Summe des operands. Wenn es in der inneren Umgebung bewertet wird, wo das Symbol "+" zum Wert des Verfahrens "*" gebunden worden ist, ist das Ergebnis das Produkt der zwei operands.

R5RS löst diese Verwirrung durch das Spezifizieren von drei Verfahren auf, die Umgebungen und Versorgung eines Verfahrens zurückgeben, das einen S-Ausdruck und eine Umgebung nimmt und den Ausdruck in der zur Verfügung gestellten Umgebung bewertet. (R5RS sec. 6.5) erweitert R6RS das durch die Versorgung eines genannten Verfahrens, durch den der Programmierer genau der Gegenstände angeben kann, in die Einschätzungsumgebung zu importieren.

Die Behandlung von non-boolean schätzt in boolean Ausdrücken

In den meisten Dialekten des Lispelns einschließlich des Allgemeinen Lispelns durch die Tagung bewertet der Wert zum in einem boolean Ausdruck falschen Wert. Im Schema, seit dem IEEE Standard 1991, bewerten alle Werte außer #f, einschließlich 's gleichwertig im Schema, das als' geschrieben wird, zum in einem boolean Ausdruck wahren Wert. (R5RS sec. 6.3.1)

Wo das unveränderliche Darstellen des boolean Werts von wahren in die meisten ist, Lispelt im Schema, das es ist.

Zusammenhangloskeit von primitivem datatypes

Im Schema sind die primitiven datatypes zusammenhanglos. Nur ein der folgenden Prädikate können auf jeden Schema-Gegenstand zutreffen:. (R5RS sec 3.2)

Innerhalb des numerischen datatype, im Vergleich, des numerischen Wertübergreifens. Zum Beispiel befriedigt ein Wert der ganzen Zahl ganzen, und Prädikate zur gleichen Zeit. (R5RS sec 6.2)

Gleichwertigkeitsprädikate

Schema hat drei verschiedene Typen der Gleichwertigkeit zwischen willkürlichen Gegenständen, die durch drei verschiedene Gleichwertigkeitsprädikate, Vergleichsoperatoren angezeigt sind, um Gleichheit zu prüfen, und:

  • bewertet dazu, wenn seine Rahmen denselben Datengegenstand im Gedächtnis nicht vertreten;
  • ist allgemein dasselbe als, aber behandelt primitive Gegenstände (z.B Charaktere und Zahlen) besonders, so dass Zahlen, die denselben Wert vertreten, sind, selbst wenn sie sich auf denselben Gegenstand nicht beziehen;
  • vergleicht Datenstrukturen wie Listen, Vektoren und Schnuren, um zu bestimmen, ob sie kongruente Struktur und Inhalt haben. (R5RS sec. 6.1)

Typ-Abhängiger-Gleichwertigkeitsoperationen bestehen auch im Schema: Und vergleichen Sie zwei Schnuren (der Letztere führt einen mit dem Fall unabhängigen Vergleich durch); und vergleichen Sie Charaktere; vergleicht Zahlen.

Anmerkungen

Bis zum R5RS Standard war die Standardanmerkung im Schema ein Strichpunkt, der den Rest der Linie unsichtbar macht, um Zu intrigieren. Zahlreiche Durchführungen haben alternative Vereinbarung unterstützt, die Anmerkungen erlaubt, sich für mehr als eine einzelne Linie auszustrecken, und der R6RS Standard erlaubt zwei von ihnen: Ein kompletter S-Ausdruck kann in eine Anmerkung verwandelt werden (oder "hat kommentiert") durch das Vorangehen ihm damit (eingeführt in SRFI 62) und eine Mehrlinienanmerkung oder "Block-Anmerkung" durch den Umgebungstext durch erzeugt werden können und.

Eingang/Produktion

Der Eingang und Produktion des Schemas basieren auf dem Hafen datatype. (R5RS sec 6.6) R5RS definiert zwei Verzug-Häfen, die mit den Verfahren zugänglich sind, und, die den Begriffen von Unix des Standardeingangs und der Standardproduktion entsprechen. Die meisten Durchführungen stellen auch zur Verfügung. Die Wiederrichtung des Eingangs und der Standardproduktion wird im Standard, durch Standardverfahren solcher als unterstützt und. Die meisten Durchführungen versorgen Schnur-Häfen mit ähnlichen Wiederrichtungsfähigkeiten, vielen normalen Eingangsproduktionsoperationen ermöglichend, auf Schnur-Puffern statt Dateien mit Verfahren durchgeführt zu werden, die in SRFI 6 beschrieben sind. Der R6RS Standard gibt viel hoch entwickeltere und fähige Hafen-Verfahren und viele neue Typen des Hafens an.

Die folgenden Beispiele werden im strengen R5RS Schema geschrieben.

Beispiel 1: Mit der Produktion, die zum (aktuellen Produktionshafen) im Verzug ist:

(lassen Sie ((hello0 (Lambda (Anzeige "Hallo Welt") (newline))))

(hello0))

</syntaxhighlight>

Beispiel 2: Als 1, aber das Verwenden fakultativen Hafen-Arguments für Produktionsverfahren

(lassen Sie ((hello1 (Lambda (p) (Anzeige "Hallo Welt" p) (newline p))))

(hello1 (aktueller Produktionshafen)))

</syntaxhighlight>

Beispiel 3: Als 1, aber Produktion wird zu einer kürzlich geschaffenen Datei umadressiert

; NB: Mit der Produktion zur Datei ist ein fakultatives Verfahren in R5RS

(lassen Sie ((hello0 (Lambda (Anzeige "Hallo Welt") (newline))))

(mit der Produktion zur Datei "helloworldoutputfile" hello0))

</syntaxhighlight>

Beispiel 4: Als 2, aber mit der ausführlichen Datei offen und Hafen in der Nähe davon senden Produktion an die Datei

(lassen Sie ((hello1 (Lambda (p) (Anzeige "Hallo Welt" p) (newline p)))

(Produktionshafen (offene Produktionsdatei "helloworldoutputfile")))

(hello1 Produktionshafen)

(Produktionshafen des nahen Produktionshafens))

</syntaxhighlight>

Beispiel 5: Als 2, aber mit dem Verwenden des Anrufs mit der Produktionsdatei, um Produktion an eine Datei zu senden.

(lassen Sie ((hello1 (Lambda (p) (Anzeige "Hallo Welt" p) (newline p))))

(rufen Sie mit der Produktionsdatei "helloworldoutputfile" hello1))

</syntaxhighlight>

Ähnliche Verfahren werden für den Eingang zur Verfügung gestellt. R5RS Schema stellt die Prädikate zur Verfügung und. Für den Charakter-Eingang und die Produktion, und werden zur Verfügung gestellt. Um Schema-Ausdrücke zu schreiben und zu lesen, stellt Schema zur Verfügung und. Auf einer gelesenen Operation ist das Ergebnis zurückgekehrt ist der Gegenstand des Endes der Datei, wenn der Eingangshafen das Ende der Datei erreicht hat, und das mit dem Prädikat geprüft werden kann.

Zusätzlich zum Standard definiert SRFI 28 ein grundlegendes Formatierungsverfahren, das der Funktion des allgemeinen Lispelns ähnelt, nach der es genannt wird.

Wiederdefinition von Standardverfahren

Im Schema werden Verfahren zu Variablen gebunden. An R5RS hat der Sprachstandard formell das beauftragt Programme können die Variable bindings eingebauter Verfahren ändern, effektiv sie wiederdefinierend. (R5RS "Sprachänderungen") Zum Beispiel, man kann sich ausstrecken, um Schnuren sowie Zahlen zu akzeptieren, indem man es wiederdefiniert:

(Satz! +

(lassen Sie ((ursprünglich + +))

(Lambda args

(wenn (und (nicht (ungültig? args)) (Schnur? (Auto args)))

(wenden Sie sich Schnur - hängen args an)

(wenden Sie sich ursprünglich + args)))))

(+ 1 2 3)

> 6

(+ "1" "2" "3")

> "123"

</syntaxhighlight>

In R6RS gehört jede Schwergängigkeit, einschließlich der normalen, einer Bibliothek, und alle haben exportiert bindings sind unveränderlich. (R6RS sec 7.1) wegen dessen wird die Wiederdefinition von Standardverfahren durch die Veränderung verboten. Statt dessen ist es möglich, ein verschiedenes Verfahren unter dem Namen eines normalen zu importieren, der tatsächlich der Wiederdefinition ähnlich ist.

Nomenklatur und Namengeben-Vereinbarung

Im Standardschema enthalten Verfahren die wandeln sich von einem datatype bis einen anderen um, die Charakter-Schnur "->" in ihrem Namen, Prädikat-Ende mit"?", und Verfahren, die den Wert des bereits zugeteilten Datenendes mit ändern"!". Dieser Vereinbarung wird häufig von Schema-Programmierern gefolgt.

In formellen Zusammenhängen wie Schema-Standards wird das Wort "Verfahren" in der Bevorzugung vor "der Funktion" verwendet, sich auf einen Lambda-Ausdruck oder primitives Verfahren zu beziehen. Im normalen Gebrauch werden die Wörter "Verfahren" und "Funktion" austauschbar verwendet. Auf Verfahren-Anwendung wird manchmal formell als Kombination verwiesen.

Als in anderem Lispelt, der Begriff "thunk" wird im Schema gebraucht, sich auf ein Verfahren ohne Argumente zu beziehen. Der Begriff "richtiger Schwanz recursion" bezieht sich auf das Eigentum aller Schema-Durchführungen, dass sie Optimierung des Schwanz-Anrufs durchführen, um eine unbestimmte Zahl von aktiven Schwanz-Anrufen zu unterstützen.

Die Form der Titel der Standarddokumente seit R3RS, "Revidierter Bericht über das Algorithmische Sprachschema", ist eine Verweisung auf den Titel des Algols 60 Standard-Unterlage, "Der revidierte Bericht über das Algorithmische Sprach-ALGOL 60," wird Die Zusammenfassende Seite von R3RS auf der Zusammenfassenden Seite des Algols 60 Bericht nah modelliert.

Rezension von Standardformen und Verfahren

Die Sprache wird in den Standards R5RS (1998) und R6RS (2007) formell definiert. Sie beschreiben Standard"Formen": Schlüsselwörter und Begleitsyntax, die die Kontrollstruktur der Sprache und Standardverfahren zur Verfügung stellen, die allgemeine Aufgaben durchführen.

Standardformen

Dieser Tisch beschreibt die Standardformen im Schema. Einige Formen erscheinen in mehr als einer Reihe, weil sie in eine einzelne Funktion auf der Sprache nicht leicht eingeteilt werden können.

Formen haben "L" in diesem Tisch gekennzeichnet werden als abgeleitete "Bibliotheks"-Formen im Standard klassifiziert und werden häufig als Makros mit grundsätzlicheren Formen in der Praxis durchgeführt, die Aufgabe der Durchführung viel leichter machend, als auf anderen Sprachen.

Standardverfahren

Die folgenden zwei Tische beschreiben die Standardverfahren im R5RS Schema. R6RS ist viel umfassender, und eine Zusammenfassung dieses Typs würde nicht praktisch sein.

Einige Verfahren erscheinen in mehr als einer Reihe, weil sie in eine einzelne Funktion auf der Sprache nicht leicht eingeteilt werden können.

Schnur und Charakter-Verfahren, die "-ci" in ihren Namen enthalten, führen mit dem Fall unabhängige Vergleiche zwischen ihren Argumenten durch: Großbuchstaben und Versionen der unteren Umschaltung desselben Charakters werden genommen, um gleich zu sein.

Durchführungen - und / die mehr als zwei Argumente nehmen, werden definiert, aber fakultativ an R5RS verlassen.

Schema-Bitten um die Durchführung

Wegen des Minimalismus des Schemas werden viele allgemeine Verfahren und syntaktische Formen durch den Standard nicht definiert. Um die Kernsprache klein zu halten, aber Standardisierung von Erweiterungen zu erleichtern, hat die Schema-Gemeinschaft eine "Schema-Bitte um die Durchführung" (SRFI) Prozess, durch den Erweiterungsbibliotheken durch die sorgfältige Diskussion von Erweiterungsvorschlägen definiert werden. Das fördert Codebeweglichkeit. Viele der SRFIs werden durch alle oder die meisten Schema-Durchführungen unterstützt.

SRFIs mit der ziemlich breiten Unterstützung in verschiedenen Durchführungen schließen ein:

  • 0: Eigenschaft-basierte bedingte Vergrößerung baut
  • 1: Listenbibliothek
  • 4: homogener numerischer Vektor datatypes
  • 6: grundlegende Schnur-Häfen
  • 8: erhalten Sie, zu vielfachen Werten bindend
  • 9: das Definieren von Rekordtypen
  • 13: Schnur-Bibliothek
  • 14: Zeichenmenge-Bibliothek
  • 16: Syntax für Verfahren der Variable arity
  • 17: verallgemeinerter Satz!
  • 18: Nebenläufigkeitsunterstützung
  • 19: Zeitdatentypen und Verfahren
  • 25: mehrdimensionale Reihe-Primitive
  • 26: Notation, um Rahmen zu spezialisieren, ohne mit Currysoße zuzubereiten
  • 27: Quellen von zufälligen Bit
  • 28: grundlegendes Format spannt
  • 29: Lokalisierung
  • 30: verschachtelte Mehrlinie kommentiert
  • 31: eine spezielle Form für die rekursive Einschätzung
  • 37: args-fach: ein Programm-Argument-Verarbeiter
  • 39: Parameter wendet ein
  • 41: Ströme
  • 42: eifrige Verständnisse
  • 43: Vektor-Bibliothek
  • 45: Primitive, um wiederholende faule Algorithmen auszudrücken
  • 60: ganze Zahlen als Bit
  • 61: eine allgemeinere cond Klausel
  • 66: Oktett-Vektoren
  • 67: vergleichen Sie Verfahren

Eine volle Liste von akzeptiertem (beendetem) SRFIs ist an http://srfi.schemers.org/final-srfis.html verfügbar

Durchführungen

Das elegante, Minimalist-Design hat Schema ein populäres Ziel für Sprachentwerfer, Hobbyisten und Pädagogen gemacht, und wegen der kleinen Größe eines typischen Dolmetschers ist es auch eine populäre Wahl für eingebettete Systeme und scripting. Das ist auf Hunderte von Durchführungen hinausgelaufen, von denen die meisten sich von einander so viel unterscheiden, dass das Halten nach Backbord von Programmen von einer Durchführung bis einen anderen ziemlich schwierig ist; und die kleine Größe der Standardsprache bedeutet, dass das Schreiben eines nützlichen Programms jeder großen Kompliziertheit im normalen, tragbaren Schema fast unmöglich ist. Der R6RS Standard gibt eine viel breitere Sprache in einem Versuch an, seine Bitte an Programmierer zu verbreitern.

Fast alle Durchführungen stellen eine traditionelle mit dem Lispeln artige read-eval-print Schleife für die Entwicklung und das Beseitigen zur Verfügung. Viele kompilieren auch Schema-Programme zur rechtskräftigen Dualzahl. Unterstützung, um Schema-Code in auf anderen Sprachen geschriebenen Programmen einzubetten, ist auch üblich, weil die Verhältniseinfachheit von Schema-Durchführungen Schema eine populäre Wahl macht, um scripting Fähigkeiten zu größeren Systemen hinzuzufügen, die auf Sprachen wie C entwickelt sind. Gambit, Chicken und Bigloo arbeiten durch das Kompilieren des Schemas zu C, der das Einbetten besonders leicht macht. Außerdem kann der Bearbeiter von Bigloo konfiguriert werden, um JVM bytecode zu erzeugen, und es zeigt auch einen experimentellen bytecode Generator für.Net.

Einige Durchführungen unterstützen zusätzliche Eigenschaften. Zum Beispiel versorgen Kawa und JScheme Integration mit javanischen Klassen, und das Schema zu C Bearbeitern macht es häufig leicht, Außenbibliotheken zu verwenden, die in C, bis zum Erlauben des Einbettens des wirklichen C-Codes in der Schema-Quelle geschrieben sind. Ein anderes Beispiel ist Pvts, der eine Reihe von Sehwerkzeugen anbietet, für das Lernen vom Schema zu unterstützen.

Gebrauch

Schema wird von mehreren Schulen weit verwendet; insbesondere mehrere einleitende Informatik-Kurse verwenden Schema in Verbindung mit dem Lehrbuch Struktur und Interpretation von Computerprogrammen (SICP). Seit den letzten 12 Jahren hat PLT ProgramByDesign geführt (früher TeachScheme!) Projekt, das in der Nähe von 600 Lehrern der Höheren Schule und Tausenden von Studenten der Höheren Schule zur rudimentären Schema-Programmierung ausgestellt hat. Die alte einleitende Programmierklasse 6.001 von MIT wurde im Schema unterrichtet, Obwohl 6.001 durch modernere Kurse ersetzt worden ist, setzt SICP fort, an MIT unterrichtet zu werden.

Das Lehrbuch, Wie man Programme von Matthias Felleisen zurzeit an der Nordöstlichen Universität Entwirft, wird von einigen Instituten für die Hochschulbildung für ihre einleitenden Informatik-Kurse verwendet. Sowohl Nordöstliche Universität als auch Worcester Polytechnikum verwenden Schema exklusiv für ihre einleitenden Kurs-Grundlagen der Informatik (CS2500) und Einführung ins Programm-Design (CS1101) beziehungsweise. Indianas einleitende Klasse der Universität, C211, wird völlig im Schema unterrichtet. Die einleitende Klasse an UC Berkeley, CS 61A, wurde bis neulich völlig im Schema unterrichtet, sparen Sie geringe Ablenkungen ins Firmenzeichen, um dynamisches Spielraum zu demonstrieren; alle Kurs-Materialien, einschließlich des Vortrags webcasts, sind online kostenlos verfügbar. Die einleitenden Informatik-Kurse an Yale und Grinnell College werden auch im Schema unterrichtet. Mehrere einleitende Informatik-Kurse an der Reisuniversität werden auch im Schema unterrichtet. Das Programmieren von Designparadigmen, einem obligatorischen Kurs für die Informatik-Studenten im Aufbaustudium an der Nordöstlichen Universität, verwendet auch umfassend Schema.

Der Einführungsinformatik-Kurs an der Universität Minnesotas - Zwillingsstädte, CSci 1901, auch Gebrauch-Schema als seine primäre Sprache, die von einem Kurs gefolgt ist, der Studenten in die javanische Programmiersprache vorstellt.

LambdaBeans ist ein offener Quellschema-Redakteur, mit dem Syntax-Färben, der Codevollziehung und den anderen Eigenschaften helfend, die typisch sind, um Redakteure zu codieren.

In der Softwareindustrie verwendet Tata Consultancy Services, Asiens größtes Softwareberatungsunternehmen, Schema in ihrem einmonatigen Ausbildungsprogramm für frische Universitätsabsolventen.

Obwohl es relativ wenige Beispiele des Schemas im offenbaren Gebrauch zu nichtpädagogischen Zwecken gibt, wird es für den folgenden verwendet:

  • Mönch, eine von SeeBeyond entwickelte Durchführung, um sich ausstreckende Anwendungsfunktionalität in ihren Unternehmensanwendungsintegrationswerkzeugen zu unterstützen.
  • Die Dokumentenstil-Semantik- und Spezifizierungssprache (DSSSL), der eine Methode zur Verfügung stellt, SGML stylesheets anzugeben, verwendet eine Schema-Teilmenge.
  • Der wohl bekannte offene Quellraster der Grafikredakteur GIMP verwendet Schema als eine scripting Sprache.
  • Hinterlist ist durch das GNU-Projekt als seine offizielle scripting Sprache angenommen worden, und diese Durchführung des Schemas wird in solchen Anwendungen wie GNU LilyPond und GnuCash als eine scripting Sprache für Erweiterungen eingebettet. Ebenfalls hat Hinterlist gepflegt, die scripting Sprache für den Tischumgebungs-ZWERG zu sein, und ZWERG hat noch ein Projekt, das Hinterlist bindings seinem Bibliotheksstapel zur Verfügung stellt.
  • Elch-Schema wird von Synopsys als eine scripting Sprache für sein Technologie-CAD (TCAD) Werkzeuge verwendet.
  • Shiro Kawai, älterer Programmierer auf dem Film, hat Schema als eine scripting Sprache verwendet, für den Echtzeitübergabe-Motor zu führen.
  • Der Google App Erfinder für den Androiden verwendet Schema, wo Kawa verwendet wird, um den Schema-Code unten zu Byte-Codes für Java Virtuelle Maschine zu kompilieren, die auf Androide-Geräten läuft.

Siehe auch

  • Bearbeiter von Stalin, ein Bearbeiter für das Schema
  • Struktur und Interpretation von Computerprogrammen, einem klassischen Informatik-Lehrbuch.
  • Wie man Programme Entwirft, der vorhat, Grundsätze zu unterrichten, die Schema übertreffen und wahrgenommene Unangemessenheit in SICP zu richten.
  • Rufen Sie mit der aktuellen Verlängerung (Anruf/Cc)
  • SXML - eine veranschaulichende Darstellung für XML im Schema, das eine aufrichtige Annäherung an XML Daten zur Verfügung stellt, die im Schema in einer Prozession gehen

Weiterführende Literatur

Außenverbindungen


Strategischer Luftbefehl / Gesellschaft für die psychische Forschung
Impressum & Datenschutz