TUTOR - TUTOR
Paradigma | zwingend ( prozedural ) |
---|---|
Entworfen von | Paul Tenczar & Richard Blomme |
Entwickler | Paul Tenczar & University of Illinois at Urbana-Champaign |
Erstmals erschienen | 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 do
oder join
aufgerufen 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
write
obigen 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 arrow
Befehlsmarkierungen 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 arrow
Befehl und endet mit dem nächsten arrow
, endarrow
oder unit
Befehl. Der arrow
Befehl 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 answer
und wrong
. Diese wiesen eine identische Mustervergleichssemantik auf, außer dass answer
eine Schülerantwort als richtig wrong
beurteilt wurde, wenn sie übereinstimmte, während eine Schülerantwort als falsch beurteilt wurde.
Die Tag-Felder der Befehle answer
und wrong
bestanden 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 specs
Befehl 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 answer
oder 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 join
Befehl 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 do
Befehl, 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 draw
Befehl 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 skip
des Tags draw
könnte der Befehl dazu gebracht werden, seinen Stift konzeptionell anzuheben.
Die Tags des circle
Befehls 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
, endif
Blöcke mit optionaler elseif
und else
Abschnitte. 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 calc
Anweisung 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 reloop
und outloop
-Befehle etwas analog zu den continue
und 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=y
als wahr definiert, wenn x
und y
ungefä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<y
und x≥y
gleichzeitig 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 n1
through adressiert, n150
wenn sie zum Halten von Integerwerten verwendet wurden, oder als v1
through, v150
wenn sie zum Halten von Gleitkommawerten verwendet wurden.
Eine TUTOR-Lektion könnte mit dem common
Befehl 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 nc1
Durch nc1500
(für Ganzzahlen) oder vc1
Durch vc1500
(für Gleitkommazahlen) adressiert .
Wo 150 Schülervariablen nicht ausreichten, konnte eine Lektion den
storage
Befehl 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 nc1
to nc1000
als gemeinsam genutzter unbenannter gemeinsamer Block definiert, während nc1001
to ein nc1075
privater Speicher ist.
Symbolische Namen definieren
Der define
Befehl 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 mynames
drei Gleitkommavariablen definieren. Die Benutzer wurden darauf hingewiesen, dass " es in Ihrer Lektion nirgendwo v3 oder v26 sein sollte, außer in der define
Anweisung 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 a
darf 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, setname
Wü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 pack
um eine gepackte Zeichenkette in aufeinanderfolgende Variablen im Speicher zu platzieren, search
nach einer Zeichenkette in einer anderen zu suchen und move
eine 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 segment
wurden, 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 unit
Befehl 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 do
die 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 lvars
Befehl 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 unit
oben angegebenen Befehls werden als Zeilen eines impliziten define
Befehls mit lokalem Geltungsbereich angesehen . Herkömmliche Definitionen in Form von Schülervariablen, wie n150
sie in einem solchen local verwendet werden könnten define
, aber die hier veranschaulichten Formen binden alle automatisch Namen an Stellen in dem durch den lvars
Befehl 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
- PLATO-Benutzerhandbuch , CDC Corporation, überarbeitet im April 1981.
- Notiz des TUTOR-Benutzers. Einführung in TUTOR , Computer-Based Education Research Laboratory, University of Illinois at Urbana Champaign, März 1973.
- PLATO User's Memo, Nummer Eins: Zusammenfassung der TUTOR-Befehle und Systemvariablen. Dritte Auflage von Elaine Avner, Computer-Based Education Research Laboratory, University of Illinois at Urbana Champaign, November 1975.
- Zusammenfassung der TUTOR-Befehle und Systemvariablen (10. Auflage) von Elaine Avner, Computer-Based Education Research Laboratory, University of Illinois at Urbana Champaign, November 1981.
- Eine persönliche Bewertung des PLATO-Systems von Stewart A. Denenberg, ACM SIGCUE Outlook, 12, 2 (April 1978) Seiten 3–10.
- Laufzeitunterstützung für die TUTOR-Sprache auf einem kleinen Computersystem , von Douglas W. Jones , 1976.
- The TUTOR Language , von Bruce Sherwood, Computer-Based Education Research Laboratory, University of Illinois at Urbana Champaign, Juni 1974.
- Die TUTOR-Sprache von Bruce Sherwood, Control Data Education Company, 1977.
- Das Studententerminal Plato IV von Jack Stifle
- Die Programmiersprache cT (abgeleitet von TUTOR) vom Center for Design of Educational Computing an der Carnegie Mellon University von David Andersen, Bruce Sherwood, Judith Sherwood und Kevin Whitley (ab 2002 nicht mehr unterstützt).