TUTOR - TUTOR

TUTOR
Paradigma zwingend ( prozedural )
Entworfen von Paul Tenczar & Richard Blomme
Entwickler Paul Tenczar & University of Illinois at Urbana-Champaign
Erstmals erschienen 1969 ( 1969 )
Schreibdisziplin keiner
Wichtige Implementierungen
TUTOR, Mikro-TUTOR
Beeinflusst
TenCORE , USE ( Regency-Systeme )

TUTOR , auch bekannt als PLATO Author Language , ist eine Programmiersprache, die ab etwa 1965 für die Verwendung auf dem PLATO-System an der University of Illinois in Urbana-Champaign entwickelt wurde. TUTOR wurde ursprünglich von Paul Tenczar für den Einsatz im computergestützten Unterricht (CAI) entwickelt. und Computer Managed Instruction (CMI) (in Computerprogrammen, die als "Lektionen" bezeichnet werden) und hat viele Funktionen für diesen Zweck. Zum Beispiel verfügt TUTOR über leistungsstarke Befehle zum Analysieren und Beurteilen von Antworten, Grafiken und Funktionen, um die Handhabung von Schülerdatensätzen und -statistiken durch Lehrer zu vereinfachen. Die Flexibilität von TUTOR in Kombination mit der Rechenleistung von PLATO (die 1972 auf einem Supercomputer lief) machte es auch für die Entwicklung von Spielen geeignet - einschließlich Flugsimulatoren, Kriegsspielen, Multiplayer-Rollenspielen im Dungeon-Stil, Kartenspielen, Wort Spiele und medizinische Unterrichtsspiele wie Bugs and Drugs ( BND ). TUTOR lebt heute als Programmiersprache für das Cyber1 PLATO System weiter, das den größten Teil des Quellcodes von PLATO aus den 1980er Jahren ausführt und im Juni 2020 etwa 5000 Benutzer hat.

Ursprünge und Entwicklung

TUTOR wurde ursprünglich als spezielle Autorensprache für die Gestaltung von Unterrichtsstunden entwickelt und seine Entwicklung zu einer universellen Programmiersprache war ungeplant. Der Name TUTOR wurde erstmals in den späteren Tagen von Platon III auf die Autorensprache des PLATO-Systems angewendet . Die erste Dokumentation der Sprache unter diesem Namen scheint The TUTOR Manual , CERL Report X-4, von RA Avner und P. Tenczar, Jan. 1969 gewesen zu sein.

Der Artikel Teaching the Translation of Russian by Computer gibt eine Momentaufnahme von TUTOR aus der Zeit kurz bevor PLATO IV in Betrieb war. Kernelemente der Sprache waren vorhanden, aber Befehle wurden in Großbuchstaben angegeben, und anstatt einen allgemeinen Mechanismus zu verwenden, wurden alternative Zeichensätze durch spezielle Befehlsnamen wie WRUSS"Schreiben mit dem russischen Zeichensatz" unterstützt.

In den 1970er Jahren machten sich die Entwickler von TUTOR die Tatsache zunutze, dass der gesamte Korpus der TUTOR-Programme online auf demselben Computersystem gespeichert war. Wann immer sie das Bedürfnis hatten, die Sprache zu ändern, ließen sie eine Konvertierungssoftware über den Korpus des TUTOR-Codes laufen, um den gesamten vorhandenen Code so zu überarbeiten, dass er mit den von ihnen vorgenommenen Änderungen übereinstimmte. Infolgedessen kann es nach der Entwicklung neuer Versionen von TUTOR sehr schwierig sein, die Kompatibilität mit der PLATO-Version aufrechtzuerhalten.

Die Control Data Corporation (CDC) hatte 1981 den Namen TUTOR weitgehend aus ihrer PLATO-Dokumentation gestrichen. Sie bezeichneten die Sprache selbst als PLATO-Autorensprache . Der Begriff TUTOR-Datei oder sogar TUTOR-Unterrichtsdatei blieb jedoch als Name des Dateityps erhalten, der zum Speichern von in der PLATO-Autorensprache geschriebenen Texten verwendet wurde.

Aufbau einer TUTOR-Lektion

Eine TUTOR-Lektion besteht aus einer Abfolge von Einheiten, wobei jede Einheit mit der Präsentation von Informationen beginnt und der Fortschritt von einer Einheit zur nächsten davon abhängt, dass eine oder mehrere Fragen richtig beantwortet werden. Wie bei COBOL- Absätzen kann die Steuerung eine TUTOR-Einheit von der vorhergehenden Einheit betreten und in die nächste verlassen, aber Einheiten können auch als Unterroutinen mit den Befehlen dooder joinaufgerufen werden.

Hier ist eine Beispieleinheit von Seite 5 des TUTOR User's Memo , März 1973 ( Computer-based Education Research Laboratory , University of Illinois at Urbana-Champaign):

unit    math
at      205
write   Answer these problems

        3 + 3 =

        4 × 3 =

arrow   413
answer  6
arrow   613
answer  12

Mehrere Dinge sollten aus diesem Beispiel sofort ersichtlich sein.

  • Erstens ist TUTOR eine Sprache mit festem Format. Jede Zeile beginnt mit einem Befehlsnamen, der in ein festes 8-stelliges Feld für den Befehlsnamen passen muss. Die Argumente für diesen Befehl (das Tag ) beginnen mit dem 9. Zeichen. Obwohl eine Tabulatortaste verwendet wurde, um in die 9. Spalte zu gelangen, wurden Leerzeichen erzeugt, da Plato kein Tabulatorzeichen hatte.
  • In einigen Fällen, wie dem writeobigen Befehl, kann das Tag aus mehreren Zeilen bestehen. Fortsetzungszeilen sind entweder leer oder haben einen führenden Tabulator.
  • Bildschirmkoordinaten werden als einzelne Zahlen dargestellt, 205 bezieht sich also auf Zeile 2, Spalte 5 und 413 bezieht sich auf Zeile 4, Spalte 13.

Was möglicherweise nicht offensichtlich ist, ist die in dieser Einheit implizite Kontrollstruktur. Die arrowBefehlsmarkierungen der Eingang zu einer Beurteilungsblock Dieser Steuerungsstruktur eines von Tutors einzigartiger Eigenschaften.

Einzigartige Funktionen

TUTOR enthielt eine Reihe einzigartiger Funktionen. Die folgende Liste ist nicht als Ersatz für ein TUTOR-Handbuch gedacht, sondern hebt lediglich die interessantesten, innovativsten und manchmal verwirrendsten Merkmale der Sprache hervor.

Antwort urteilen

Ein Beurteilungsblock in TUTOR ist eine Steuerstruktur , die mit einem beginnt arrowBefehl und endet mit dem nächsten arrow, endarrowoder unitBefehl. Der arrowBefehl fordert auch zur Eingabe auf, wobei das spezielle Pfeilzeichen (ähnlich "▷") als Aufforderung an den angezeigten Bildschirmkoordinaten angezeigt wird. Tatsächlich kann man sich einen Beurteilungsblock als Rückverfolgungskontrollstruktur vorstellen, bei der der Schüler mehrere Versuche unternehmen kann, eine Frage zu beantworten, bis eine richtige Antwort einen Fortschritt ermöglicht.

Beurteilen des Mustervergleichs

Jeder Beurteilungsblock besteht aus einer Folge von Mustervergleichsbefehlen , von denen jeder einen (möglicherweise leeren) Befehlsblock einführt, der auszuführen ist, wenn dieses Muster übereinstimmt. Die beiden gebräuchlichsten Befehle zum Mustervergleich waren answerund wrong. Diese wiesen eine identische Mustervergleichssemantik auf, außer dass answereine Schülerantwort als richtig wrongbeurteilt wurde, wenn sie übereinstimmte, während eine Schülerantwort als falsch beurteilt wurde.

Die Tag-Felder der Befehle answerund wrongbestanden aus Listen optionaler, erforderlicher und alternativer Wörter. Betrachten Sie dieses Beispiel aus Übung 4-1 im TUTOR User's Memo von 1973 :

answer  <it, is,a, it's, figure,
        polygon>
        (right, rt) (triangle, triangular)

Dies würde Antworten wie "es ist ein rechtwinkliges Dreieck" oder "es ist eine dreieckige Figur" oder einfach "rt-Dreieck" entsprechen. Es würde nicht mit "irgendwie dreieckig" übereinstimmen, weil die Wörter "irgendwie" nicht als ignoriert aufgeführt werden, und es würde nicht mit "Dreieck, richtig?" übereinstimmen. weil die reihenfolge falsch ist.

Das Subsystem für den Mustervergleich hat Rechtschreibfehler erkannt, sodass die Wörter "Dreieck" oder "Dreieck" mit dem Beispielmuster übereinstimmen. Der Unterrichtsautor konnte mit dem specsBefehl einstellen, wie pedantisch das System in Bezug auf Rechtschreibfehler war.

Die von verschiedenen TUTOR-Implementierungen verwendeten Mustervergleichsalgorithmen variierten im Detail, aber typischerweise wurde jedes Wort im Eingabetext und jedes Wort im Muster in Bitvektoren umgewandelt . Um zu sehen, ob ein Wort der Schülereingabe mit einem Wort des Musters übereinstimmt, wurde die Hamming-Distanz zwischen den zwei Bitvektoren als Maß für den Grad der Differenz zwischen den Wörtern verwendet. Bitvektoren waren typischerweise 60 oder 64 Bit lang, mit Feldern für das Vorhandensein von Buchstaben, das Vorhandensein von Buchstabenpaaren und den ersten Buchstaben. Als Ergebnis näherte sich die Anzahl von einem Bit in den exklusiven oder zwei solcher Bitvektoren dem Ausmaß der phonetischen Differenz zwischen den entsprechenden Wörtern.

Beurteilen von Kontrollstrukturen

Alle frühen Darstellungen der Kontrollstruktur eines TUTOR-Richterblocks waren verwirrend. In modernen Begriffen kann ein Beurteilungsblock jedoch als eine iterative Kontrollstruktur beschrieben werden , die beendet wird, wenn die Schülereingabe als richtig beurteilt wird. Der Hauptteil dieser Kontrollstruktur besteht aus einer Reihe von Fällen , die jeweils durch einen Mustervergleichsbefehl wie answeroder eingeleitet werdenwrong . Alle vom Körper der Beurteilungsschleife im vorherigen Zyklus erzeugten Ausgaben werden vor dem nächsten Zyklus vom Bildschirm gelöscht.

Betrachten Sie dieses Beispiel aus Übung 4-1 des TUTOR User's Memo von 1973 :

wrong   <it, is,a> square
at      1501
write   A square has four
        sides.

Falls der Schüler "Quadrat" oder "ein Quadrat" eingibt, wird die Antwort als falsch beurteilt und der Text "Ein Quadrat hat vier Seiten." wird ab Zeile 15 Spalte 1 auf dem Bildschirm ausgegeben. Diese Ausgabe bleibt auf dem Bildschirm, bis der Schüler beginnt, eine neue Antwort einzugeben, woraufhin sie gelöscht wird, damit die Antwort auf die neue Antwort berechnet werden kann. Der Mechanismus, durch den der Anzeigebildschirm in seinen vorherigen Zustand zurückkehrt, variiert von Implementierung zu Implementierung. Frühe Implementierungen arbeiteten, indem das Terminal in den Löschmodus geschaltet und der gesamte Fall, der gepasst hatte, erneut ausgeführt wurde. Einige spätere Implementierungen pufferten die während der Beurteilung erzeugte Ausgabe, so dass diese Ausgabe gelöscht werden konnte.

Der joinBefehl war eine einzigartige Form des Unterprogrammaufrufs. Es wurde als äquivalent zur textuellen Ersetzung des Hauptteils der verbundenen Einheit anstelle des Join-Befehls selbst definiert (Seite 21, 1973 TUTOR User's Memo ). Als solche könnte eine verbundene Einheit einen Teil eines Beurteilungsblocks enthalten. Obwohl der Beurteilungsblock konzeptionell ein Iterator ist, der eine Reihe von Fällen einschließt , kann dieser Block also willkürlich in Unterroutinen unterteilt werden. (Ein alternativer Unterprogrammaufruf, der doBefehl, entsprach der üblichen Semantik, die mit Unterprogrammaufrufen in anderen Programmiersprachen verbunden ist.)

Grafik- und Anzeigebefehle

Das PLATO IV-Studententerminal verfügte über ein 512 x 512 Pixel großes Plasmadisplay mit Hardwareunterstützung für Punktplotten , Strichzeichnung und Textanzeige. Jedes Pixel auf dem PLATO IV-Terminal war entweder orange oder schwarz. Das CDC PLATO V-Terminal verwendet eine monochrome Schwarz-Weiß- CRT , um das Plasma-Panel zu emulieren. Der eingebaute Zeichensatz hatte 4 Sätze von 63 Zeichen, jeweils 8 x 16 Pixel, davon war die Hälfte fest, die andere Hälfte programmierbar. Die Tutor-Sprache bot vollständige Unterstützung für dieses Terminal.

Es gab zwei Koordinatensysteme (siehe Seite II-1 von The TUTOR Language von Bruce Sherwood):

  • Grobe Koordinaten wurden in Bezug auf die Zeilen und Spalten des Textes angegeben. Die grobe Koordinate 1501 war zum Beispiel ein Verweis auf Zeichen 1 in Zeile 15, wobei sich das obere linke Zeichen auf dem Bildschirm an der Position 101 befand und das untere rechte Zeichen an der Stelle 3264.
  • Feinkoordinaten wurden als X- und Y-Koordinaten relativ zur unteren linken Ecke des Bildschirms angegeben. Die Feinkoordinate 0,511 spezifizierte die obere linke Ecke des Bildschirms, während 0,496 der groben 101 entsprach, was die 16 Pixel Höhe eines Zeichens und die Tatsache berücksichtigt, dass Zeichen relativ zu ihrer unteren linken Ecke geplottet wurden.

Zeichenbefehle

Das folgende Beispiel veranschaulicht einige der Zeichenbefehle von Tutor.

draw    1812;1852;skip;1844;1544
circle  16,344,288
draw    1837;1537;1535;1633;1833

Beachten Sie die Verwendung von Semikolons, um aufeinanderfolgende Koordinaten im drawBefehl zu trennen . Dies ermöglicht die eindeutige Verwendung von durch Kommas getrennten Feinkoordinaten. Normalerweise verbindet der Zeichenbefehl aufeinanderfolgende Punkte mit Liniensegmenten, aber durch Einfügen skipdes Tags drawkönnte der Befehl dazu gebracht werden, seinen Stift konzeptionell anzuheben.

Die Tags des circleBefehls geben den Radius und die Feinkoordinaten des Mittelpunkts an. Zusätzliche Tags könnten Start- und Endwinkel für Teilkreise angeben.

Das Verfassen von Zeichenbefehlen von Hand ist schwierig, daher wurde 1974 ein Bildeditor in das PLATO-System aufgenommen, um diese Arbeit zu automatisieren. Dies konnte nur Zeichenbefehle mit konstanten Koordinaten verarbeiten.

Befehle zum Rendern von Text

Das folgende Beispiel veranschaulicht einige der Text-Rendering-Tools von Tutor.

unit    title
size    9.5     $$ text 9.5 times normal size
rotate  45      $$ text rotated 45 degrees
at      2519
write   Latin
size    0       $$ return to normal writing
rotate  0
at      3125
write   Lessons on Verbs

Text, der in Größe Null Rotation Null gerendert wurde, verwendete die eingebaute Zeichen-Rendering-Hardware des PLATO-Terminals, während das Rendering mit einer Größe ungleich Null und Rotation mit Liniensegmenten durchgeführt wurde und daher aufgrund der Geschwindigkeit der Kommunikationsverbindung zum Terminal erheblich langsamer war.

Kontrollstrukturen

Abgesehen von seinen einzigartigen Mechanismen zur Bewertung der Antworten waren die ursprünglichen Kontrollstrukturen von TUTOR eher spärlich. In der Mitte der 1970er Jahre wurde dieses Manko durch die Einführung angesprochen if, endifBlöcke mit optionaler elseifund elseAbschnitte. Die Semantik dieser Kontrollstrukturen war Routine, aber die Syntax erbte die obligatorische Einrückung der Tutor-Sprache, die die von Python voraussagte und ein einzigartiges, nicht leeres Einrückungszeichen hinzufügte, um Einrückungen von Fortsetzungszeilen zu unterscheiden.

Dies wird im folgenden Beispiel von Seite S5 der Zusammenfassung der TUTOR-Befehle und Systemvariablen (10. Aufl.) von Elaine Avner , 1981, veranschaulicht :

if      n8<4
.       write   first branch
.       calc    n9⇐34
elseif  n8=4
.       write   second branch
.       do      someunit
else
.       write   default branch
.       if      n8>6
.       .       write   special branch
.       endif
endif

(Der Zuweisungspfeil in der calcAnweisung wird in einigen Browsern nicht korrekt wiedergegeben. Er erscheint ähnlich wie <=, aber als ein Zeichen. Er hatte eine dedizierte Taste auf der PLATO IV-Tastatur.)

Die gleiche Syntax wurde für loop, endloop-Blöcke verwendet , deren Semantik mit while-Schleifen in herkömmlichen Programmiersprachen vergleichbar ist. Dies wird im folgenden Beispiel auf Seite S6 der Zusammenfassung der TUTOR-Befehle und Systemvariablen (10. Aufl.) von Elaine Avner, 1981, veranschaulicht :

loop    n8<10
.       write   within loop
.       sub1    n8
reloop  n8≥5
.       write   still within loop
.       do      someunit
outloop n8<3
.       write   still within loop
endloop
write   outside of loop

Beachten Sie, dass die reloopund outloop-Befehle etwas analog zu den continueund break-Anweisungen von Sprachen sind, die auf C basieren , mit der Ausnahme, dass sie auf der Einrückungsebene der Schleife sitzen müssen, die sie ändern, und sie haben ein Bedingungs-Tag, das angibt, wann die angegebene Steuerübertragung stattfinden soll . Dies macht das Konstrukt mächtiger als in anderen Sprachen, da jede Zeile der inneren Schleife mehrere äußere Schleifen mit einer Anweisung beenden oder erneut wiederholen könnte.

Ausdruckssyntax

Die Ausdruckssyntax von TUTOR blickte weder auf die Syntax von FORTRAN zurück , noch wurde sie durch schlecht gestaltete Zeichensätze der Zeit eingeschränkt. Zum Beispiel enthielt der Zeichensatz von PLATO IV Steuerzeichen für tiefgestellte und hochgestellte , und TUTOR verwendete diese zur Potenzierung. Betrachten Sie diesen Befehl (von Seite IV-1 von The TUTOR Language , Sherwood, 1974):

circle  (412+72.62)1/2,100,200

Der Zeichensatz enthielt auch die herkömmlichen Symbole für Multiplikation und Division ×und ÷, aber in einer radikaleren Abweichung von den von FORTRAN aufgestellten Konventionen erlaubte er implizite Multiplikation, sodass die Ausdrücke (4+7)(3+6)und mit den Werten 99 bzw. 15.9 gültig waren (op zit). Diese Funktion wurde als wesentlich angesehen. Wenn die Schüler eine numerische Antwort auf eine Frage eintippten, konnten sie Operatoren und Variablen und die algebraische Standardnotation verwenden, und das Programm würde den TUTOR-Befehl "compute" verwenden, um die Formel zu kompilieren und auszuführen und zu überprüfen, ob sie numerisch äquivalent war (oder innerhalb der Gleitkomma-Rundungsfehler) auf die richtige Antwort. 3.4+5(23-3)/2

Die Sprache enthielt eine vordefinierte Konstante mit dem griechischen Buchstaben pi (π) mit dem entsprechenden Wert, der in Berechnungen verwendet werden konnte. Somit könnte der Ausdruck verwendet werden, um die Fläche eines Kreises zu berechnen, indem die eingebaute π-Konstante, implizite Multiplikation und Exponentiation durch einen hochgestellten Index verwendet werden. πr2

In TUTOR wurde der Gleitkommavergleich x=yals wahr definiert, wenn xund yungefähr gleich sind (siehe Seite C5 von PLATO User's Memo, Number One von Avner, 1975). Dies vereinfachte das Leben für mathematisch naive Entwickler von Unterrichtsstunden, verursachte jedoch gelegentlich Kopfschmerzen bei Entwicklern von numerisch anspruchsvollem Code, weil es möglich war, dass beides x<yund x≥ygleichzeitig wahr sein konnte.

Speicherverwaltung

Als Autorensprache begann TUTOR mit nur minimalen Speicherressourcen und nur den gröbsten Werkzeugen, um sie zu manipulieren. Jeder Benutzerprozess hatte ein privates Datensegment von 150 Variablen, und gemeinsam genutzte gemeinsame Blöcke konnten angehängt werden, was eine Kommunikation zwischen Benutzern über gemeinsam genutzten Speicher ermöglichte.

Auf dem PLATO IV-System bestanden Wörter aus 60 Bits, im Einklang mit der CDC 6600- Computerfamilie. Einige spätere Implementierungen änderten dies auf 64 Bit.

Grundlegende Speicherressourcen

Der private Speicherbereich jedes Prozesses bestand aus jeweils 150 Wörtern, die als Schülervariablen bezeichnet werden; die Werte dieser Variablen waren persistent und verfolgten den einzelnen Benutzer von Sitzung zu Sitzung. Diese wurden als n1through adressiert, n150wenn sie zum Halten von Integerwerten verwendet wurden, oder als v1through, v150wenn sie zum Halten von Gleitkommawerten verwendet wurden.

Eine TUTOR-Lektion könnte mit dem commonBefehl einen einzelnen Bereich von bis zu 1500 Wörtern des gemeinsamen Speichers anhängen . Jede Lektion könnte einen unbenannten temporären gemeinsamen Block haben, der Variablen enthält, die von allen Benutzern dieser Lektion geteilt werden. Solche Blöcke wurden beim Einsatz eines Unterrichts angelegt und bei Inaktivität des Unterrichts wieder freigegeben. Im Gegensatz dazu wurden benannte allgemeine Blöcke mit einem Block einer Lektion (einer Plattendatei) verknüpft. Shared Memory wurde als nc1Durch nc1500(für Ganzzahlen) oder vc1Durch vc1500(für Gleitkommazahlen) adressiert .

Wo 150 Schülervariablen nicht ausreichten, konnte eine Lektion den storageBefehl verwenden, um ein zusätzliches privates Speichersegment von bis zu 1000 Wörtern zu erstellen. Dieses Segment existierte nur im Auslagerungsbereich, konnte aber Schülervariablen oder allgemeinen Variablen zugeordnet werden. Zum Beispiel (von Seite X-11 von The TUTOR Language , Sherwood, 1974):

common  1000
storage 75
stoload vc1001,1,75

In diesem Beispiel wird nc1to nc1000als gemeinsam genutzter unbenannter gemeinsamer Block definiert, während nc1001to ein nc1075privater Speicher ist.

Symbolische Namen definieren

Der defineBefehl Tutor war der C- #define Präprozessordirektive sehr ähnlich . Dies war die einzige Möglichkeit, mnemonische Namen mit Variablen zu verknüpfen. Es lag am Programmierer, Speicher statisch zuzuweisen und Variablen Namen zuzuweisen. Betrachten Sie dieses Beispiel von Seite 17 des TUTOR User's Memo – Introduction to TUTOR , 1973"

define  mynames
        first=v1, second =v2
        result=v3

Dadurch wird eine Reihe von Definitionen erstellt, die mynamesdrei Gleitkommavariablen definieren. Die Benutzer wurden darauf hingewiesen, dass " es in Ihrer Lektion nirgendwo v3 oder v26 sein sollte, außer in der defineAnweisung selbst . Setzen Sie alle Ihre Definitionen ganz am Anfang der Lektion, wo Sie sofort nachschlagen können , welche Variablen Sie verwenden." (Unterstreichung des Originals, Seite IV-5 von The TUTOR Language , Sherwood, 1974.)

Funktionen könnten mit Makrosubstitutionssemantik definiert werden, wie in dieser Abbildung von Seite IX-2 von The TUTOR Language , Sherwood, 1974:

define  cotan(a)=cos(a)/sin(a)

Im Gegensatz zu C waren die ursprünglichen Geltungsbereichsregeln von TUTOR reine "Definition vor Gebrauch" ohne Bestimmungen für lokale Definitionen. Somit adarf der oben verwendete Formalparameter keine vorherige Definition haben.

Später in der Entwicklung von TUTOR, mit der Einführung mehrerer benannter Definitionssätze, wurde dem Programmierer explizit die Kontrolle darüber gegeben, welche Definitionssätze derzeit gültig sind. define purge, setnameWürde beispielsweise alle Definitionen in der benannten Menge verwerfen.

Arrays, gepackte Arrays und Textmanipulation

Die ursprünglichen TUTOR-Tools zur Textmanipulation basierten auf Befehlen für bestimmte Textoperationen, beispielsweise packum eine gepackte Zeichenkette in aufeinanderfolgende Variablen im Speicher zu platzieren, searchnach einer Zeichenkette in einer anderen zu suchen und moveeine Zeichenkette von Speicher zu Speicher zu verschieben. Bis 1975 wurden allgemeinere Werkzeuge für Arrays von ganzen Zahlen und gepackte Arrays hinzugefügt. Seite 14 von PLATO User's Memo – Summary of TUTOR Commands and System Variables , Avner, 1975, gibt folgendes an:

define  segment, name=starting var, num bits per byte, s
        array, name(size)=starting var
        array, name (num rows, num columns)=starting var

Segmentierte Arrays , die mit dem Schlüsselwort definiert segmentwurden, waren vergleichbar mit gepackten Arrays in Pascal . Die Byte-Größe und ob die Array-Elemente als vorzeichenbehaftet oder unsigniert behandelt werden sollten, wurden vollständig vom Benutzer gesteuert. Eine willkürliche Textmanipulation könnte durchgeführt werden, indem die Bytegröße auf die Maschinenbytegröße eingestellt wird, 6 Bit bei Implementierungen, die den Anzeigecode verwenden , 8 Bit bei einigen späteren ASCII- und erweiterten ASCII- Implementierungen. Beachten Sie das Fehlen einer Spezifikation der Array-Dimensionalität für segmentierte Arrays.

Parameterübergabe

Zu Beginn der PLATO IV-Ära wurde TUTOR ein allgemeiner Parameterübergabemechanismus hinzugefügt. Seite IV-10 von The TUTOR Language von Sherwood, 1974, gibt das folgende Beispiel:

define  radius=v1,x=v2,y=v3
unit    vary
do      halfcirc(100,150,300)
do      halfcirc(50)
*
unit    halfcirc(radius, x,y)
circle  radius, x,y,0,180
draw    x-radius, y;x+radius, y

Beachten Sie, dass die formalen Parameter in der Parameterliste aufgeführt auf den unitBefehl einfach die definierten Namen für statisch globale Variablen zugewiesen. Die Semantik der Parameterübergabe wurde als gleichbedeutend mit der Zuweisung zum Zeitpunkt der Kontrollübergabe an die Zieleinheit angegeben, und wenn wie im zweiten Befehl oben Aktualparameter weggelassen wurden, blieben dodie vorherigen Werte der entsprechenden Formal Parameter unverändert.

Lokale Variablen

Lokale Variablen wurden um 1980 zu TUTOR hinzugefügt. Lernautoren, die lokale Variablen verwenden wollten, mussten den lvarsBefehl verwenden, um die Größe des für lokale Variablen verwendeten Puffers zu deklarieren, bis zu 128 Wörter. Danach könnte eine Einheit, die lokale Variablen verwendet, wie folgt beginnen (aus Seite C2 der Zusammenfassung der TUTOR-Befehle und Systemvariablen , Avner, 1981):

unit    someu
        NAME1,NAME2,NAME3(SIZE)
        NAME4=CONSTANT
        floating:NAME5,NAME6,NAME7(SIZE)
        integer, NUM BITS:NAME8,NAME9
        integer, NUM BITS,signed:NAME10
        integer:NAME11

Die Fortsetzungszeilen des unitoben angegebenen Befehls werden als Zeilen eines impliziten defineBefehls mit lokalem Geltungsbereich angesehen . Herkömmliche Definitionen in Form von Schülervariablen, wie n150sie in einem solchen local verwendet werden könnten define, aber die hier veranschaulichten Formen binden alle automatisch Namen an Stellen in dem durch den lvarsBefehl zugewiesenen Speicherblock . Die verfügbare TUTOR-Dokumentation behandelt nicht, wie lokale Variablen zugewiesen werden.

Andere Implementierungen

Es gab eine beträchtliche Familie von TUTOR-bezogenen Sprachen, jede ähnlich der ursprünglichen TUTOR-Sprache, aber mit Unterschieden. Insbesondere war TUTOR eine Komponente eines Systems (dem computerbasierten Bildungssystem PLATO), das auf einer bestimmten CDC-Mainframe-Hardware lief. Aus Effizienzgründen gab es in TUTOR einige hardwarespezifische Elemente (zB Variablen, die 60-Bit-Wörter waren, die als Arrays von 60 Bits oder als 10 Sechs-Bit-Zeichen usw. verwendet werden konnten). Außerdem wurde TUTOR vor dem Aufkommen der Windows-orientierten grafischen Benutzeroberfläche (GUI) entwickelt.

Die microTutor-Sprache wurde im PLATO-Projekt an der UIUC entwickelt, um zu ermöglichen, dass Teile einer Lektion in Terminals mit Mikrocomputern ausgeführt werden, wobei Verbindungen zum TUTOR-Code auf dem Mainframe ausgeführt werden. Der microTutor-Dialekt war auch die Programmiersprache des Cluster-Systems, das an der UIUC entwickelt und an TDK in Japan lizenziert wurde; Das Cluster-System bestand aus einer kleinen Gruppe von Terminals, die an einen Minicomputer angeschlossen waren, der für Speicherung und Kompilierung sorgte. Das Tencore Language Authoring System ist ein TUTOR-Derivat, das von Paul Tenczar für PCs entwickelt und von der Computer Teaching Corporation vertrieben wird. cT war ein Derivat von TUTOR und microTutor, das bei Carnegie Mellon entwickelt wurde und es ermöglichte, Programme ohne Änderung in GUI-Fensterumgebungen auf Windows-, Mac- und Unix/Linux-Systemen auszuführen: The cT Programming Language Archives

Verweise

Externe Links