WikiDer > Schema
planen | ||||
| Paradigma | Funktional | |||
| erschien | 70er Jahre | |||
| Entworfen von | Guy Steele, Gerald Jay Sussman | |||
| Typensystem | dynamisch, stark | |||
| Implementierungen | PLT-Schema, MIT/GNU-Schema und andere | |||
| Dialekte | T [1] | |||
| Beeinflusst von | lispeln, algol | |||
| Einfluss auf | Gemeinsame Lisp, Javascript, Rubin, Dylan, lua, Clojure | |||
| Dateierweiterungen | .scm, .ss | |||
| Webseite | http://plt-schema.org/ | |||
| ||||
planen ist ein funktionalProgrammiersprache. Es ist ein Dialekt der Programmiersprache lispeln. Guy L Steele und Gerald Jay Sussman entwickelte es in der siebziger Jahre und präsentierte es der Wissenschaft im sog Lambda-Papiere. Die Sprache basiert auf der Lambda-Kalkül. Die Sprache wurde ursprünglich 'Schemer' genannt, in der Tradition von Sprachen wie Planer und Conniver, wurde aber durch die Einschränkungen der ES IST-Betriebssystem das erlaubte keine Dateinamen mit mehr als 6 Zeichen.
Die Philosophie hinter Scheme ist Minimalismus. Das Ziel ist nicht, Erweiterung um Erweiterung zu stapeln, sondern Schwächen und Einschränkungen zu beseitigen, die Erweiterungen zu erfordern scheinen. Daher hat Scheme so wenig Primitive wie möglich, mit denen der Rest implementiert werden kann. Der Hauptmechanismus für Kontrollfluss ist Schwanzrekursion.
Scheme war die erste Variante von Lisp, die ausschließlich lexikalischer Variablenbereich (im Kontrast zu dynamischer variabler Bereich) benutzt. Wie Lisp verwendet Scheme Müllabfuhr Speicherorte mit ungenutzten Daten wiederzuverwenden. Die Sprache verwendet Listen als wichtig Datenstruktur, kennt aber auch viele andere. Aufgrund des Minimalismus der Scheme-Spezifikation gibt es keine Standardsyntax zum Erstellen von Strukturen mit benannten Feldern oder Unterstützung für Objekt orientierte Programmierung, aber fast jede Implementierung unterstützt diese Erweiterungen.
Scheme zeichnet sich dadurch aus, dass es die Präfix-Notation von Operationen anstelle des am häufigsten verwendeten Infix verwendet. Zum Beispiel ist 3 5 eine Infix-Notation für die Addition (der Operator liegt zwischen 3 und 5), während 3 5 die Präfix-Notation ist, bei der der Operator ( ) vor den beiden Operanden (3 und 5) steht.
Der Schema-Standard
Die Sprache wird regelmäßig aktualisiert. Anschließend werden Änderungen am Standard vorgenommen. Die aktuelle Norm stammt aus dem Jahr 2013 und heißt R7RS, was für steht Überarbeitet7 Bericht über das Algorithmische Sprachschema, zum Dokument mit der offiziellen Beschreibung der Sprache Darüber hinaus enthält die Sprache eine Reihe sehr nützlicher Bibliotheken. Dies sind die sogenannten SRFIs, die für Antrag auf Implementierung des Schemas.
Scheme verfolgt den normalen Minimalismus. Das war auch bis einschließlich R5RS der Fall. R6RS hat jedoch große Änderungen an der Sprache vorgenommen. Deshalb hat es sich entschieden Systemsteuerungsausschuss, die für die Standardisierung der Sprache zuständig ist, um Teilen. Ein Zweig wird eine umfassende, moderne Programmiersprache sein, während der andere Zweig den Minimalismus beibehalten wird. Die minimalistische Spezifikation von R7RS wurde bereits 2013 ratifiziert.
Eigenschaften
In diesem Abschnitt werden wir einige Funktionen von Scheme auflisten. Diese Liste ist nicht vollständig.
Funktionsaufruf und Auswertung von Argumenten
In Scheme werden alle Argumente eines Funktionsaufrufs vor dem eigentlichen Aufruf ausgewertet. Die Reihenfolge, in der die Argumente ausgewertet werden, ist nicht festgelegt. Es kann also nicht davon ausgegangen werden, dass diese Auswertung von links nach rechts oder in einer anderen Reihenfolge erfolgt. Dies muss daher bei der Angabe von Nebenwirkungsargumenten berücksichtigt werden.
Schema hat eine kleine Anzahl Sonderformen wo die Argumente anders ausgearbeitet werden. Ein gutes Beispiel dafür ist die wenn Sonderform. Es hat die folgende Syntax:
(wenn <predicaat><consequent><alternatief>)Was wir natürlich nicht wollen ist, dass alle Argumente eines Aufrufs vorher ausgewertet werden, je nach Wert des Prädikats entweder die konsequent entweder es Alternative durchgeführt. Dieses Verhalten kann nur mit speziellen Formularen erreicht werden. Darüber hinaus können über Makros eigene Prozeduren/Sonderformulare mit eigenen Auswertungsregeln geschrieben werden. Ohne spezielle Formulare ist es unmöglich, den folgenden Code zu schreiben:
(definieren (EinteilungZählerNenner)(wenn (= Nenner0)(Anzeige "Division ist nicht möglich, Nenner ist Null!")(/ ZählerNenner))); Würde das if den normalen Regeln folgen, würde diese Alternative auch ausgearbeitet, wenn der Nenner Null ist!; Der Aufruf der Prozedur gibt das erwartete Ergebnis zurück.(Einteilung142)>7; Wenn der Nenner null ist, tritt kein Fehler auf.(Einteilung1000)>KönnenEinteilungnichtAusführen,NenneristNull!Syntax
Scheme zeichnet sich durch eine spezielle Syntax aus, die häufig Klammern verwendet. Alle Ausdrücke sind in Klammern angegeben. Dies hat einige konkrete Konsequenzen:
- Jeder Ausdruck beginnt mit einem Schlüsselwort oder Prozedurnamen.
- Die Reihenfolge, in der die Operationen ausgeführt werden, hängt vollständig von den Klammern ab.
- Betreiber wie und - kann eine beliebige Anzahl von Argumenten haben, indem Sie einfach mehr Argumente auflisten.
(12)>3(12345)>15(- 1); Der Minus-Operator kann auch mit einem Argument aufgerufen werden.>-1; Die Reihenfolge der Operationen wird durch die Klammern angegeben.(* (2(- 31))4)>16Externe Links
- (und) Struktur und Interpretation von Computerprogrammen, Standardwerk von Abelsson und Sussman.
- (und) SFRIA, Informationen zum Antrag auf Implementierung des Programms
- (und) Schemaberichtsprozess, Informationen zum aktuellen Normungsprozess
- (und) Scheme, ein Interpreter für den erweiterten Lambda-Kalkül[toter Link] , die allererste Beschreibung von Scheme
- (und) Der überarbeitete Bericht zu Scheme[toter Link] , der Bericht über die allererste Überarbeitung des Schemas
- (und) R5RS Der R5RS-Bericht.
- (und) R6RS Weitere Informationen zu R6RS.
| Programmiersprachen |
|---|
ABAP ·ABC ·ActionScript ·Ada ·algol ·APL ·Assemblersprachen ·AWK ·B ·BASIC ·BCPL ·C ·C ·C♯ ·sauber ·Schermaschine ·COBOL ·COMAL ·Curry ·d ·Eiffel ·Erlang ·F♯ ·her ·fortran ·gehen ·Haskell ·Symbol ·J ·Java ·Kotlin ·lispeln ·Logo ·lua ·m4 ·ML ·Modula-2 ·Oberon ·Objekt Pascal ·Ziel c ·Ocamli ·Unze ·Pascal ·perl ·PHP ·PL/I ·PL/SQL ·Prolog ·Prova ·Python ·Rexx ·Rollenspiel ·Rubin ·Frieden ·SAS ·Reichweite ·planen ·Selbst ·Simula ·Smalltalk ·Schnell ·TCL ·Typoskript ·vala ·Visual Basic |