TUTOR
TUTOR, also known as PLATO Author Language, is a programming language developed for use on the PLATO system at the University of Illinois at Urbana-Champaign beginning in roughly 1965. TUTOR was initially designed by Paul Tenczar for use in computer assisted instruction (CAI) and computer managed instruction (CMI) (in computer programs called "lessons") and has many features for that purpose. For example, TUTOR has powerful answer-parsing and answer-judging commands, graphics, and features to simplify handling student records and statistics by instructors. TUTOR's flexibility, in combination with PLATO's computational power (running on what was considered a supercomputer in 1972), also made it suitable for the creation of games — including flight simulators, war games, dungeon style multiplayer role-playing games, card games, word games, and medical lesson games such as Bugs and Drugs (BND). TUTOR lives on today as the programming language for the Cyber1 PLATO System,[2] which runs most of the source code from 1980s PLATO and has roughly 5000 users as of June 2020. Origins and developmentTUTOR was originally developed as a special purpose authoring language for designing instructional lessons, and its evolution into a general purpose programming language was unplanned. The name TUTOR was first applied to the authoring language of the PLATO system in the later days of Plato III. The first documentation of the language, under this name, appears to have been Avner, Richard Allen; Tenczar, Paul (January 1969), The TUTOR Manual. CERL Report X-4 The article Teaching the Translation of Russian by Computer[3] gives a snapshot of TUTOR from shortly before PLATO IV was operational. Core elements of the language were present, but commands were given in upper case, and instead of using a general mechanism, support for alternative character sets was through special command names such as Through the 1970s, the developers of TUTOR took advantage of the fact that the entire corpus of TUTOR programs were stored on-line on the same computer system. Whenever they felt a need to change the language, they ran conversion software over the corpus of TUTOR code to revise all existing code so that it conformed with the changes they had made.[4] As a result, once new versions of TUTOR were developed, maintaining compatibility with the PLATO version could be very difficult.[5] Control Data Corporation (CDC), by 1981, had largely expunged the name TUTOR from their PLATO documentation. They referred to the language itself as the PLATO Author Language. The phrase TUTOR file or even TUTOR lesson file survived, however, as the name of the type of file used to store text written in the PLATO Author Language.[6] Structure of a TUTOR lessonA TUTOR lesson consists of a sequence of units where each unit begins with the presentation of information and progress from one unit to the next is contingent on correctly answering one or more questions. As with COBOL paragraphs, control may enter a TUTOR unit from the preceding unit and exit into the next, but units are also callable as subroutines using the Here is an example unit:[7] unit math
at 205
write Answer these problems
3 + 3 =
4 × 3 =
arrow 413
answer 6
arrow 613
answer 12
Several things should be immediately apparent from this example.
What may not be apparent is the control structure implicit in this unit. The Unique featuresTUTOR contained a number of unique features. The following list is not intended as a substitute for a TUTOR manual, but merely highlights the most interesting, innovative, and sometimes confusing features of the language. Answer judgingA judging block in TUTOR is a control structure that begins with an Judging pattern matchingEach judging block consists of a sequence of pattern matching commands, each of which introduces a (possibly empty) block of commands to be executed if that pattern matches. The two most common pattern matching commands were The tag fields on the answer <it, is,a, it's, figure,
polygon>
(right, rt) (triangle, triangular)
This would match answers such as "it is a right triangle" or "it's a triangular figure" or just "rt triangle". It would not match "sort of triangular" because the words "sort of" are not listed as ignored, and it would not match "triangle, right?" because the order is wrong. The pattern matching subsystem recognized spelling errors, so the words "triangel" or "triangl" would match the example pattern. The lesson author could use the The pattern matching algorithms used by various TUTOR implementations varied in detail, but typically, each word in the input text and each word in the pattern were converted to bit vectors. To see whether a word of student input matched a word of the pattern, the Hamming distance between the two bit vectors was used as a measure of the degree of difference between the words. Bit vectors were typically 60 or 64 bits long, with fields for letter presence, letter pair presence, and the first letter. As a result, the number of one bits in the exclusive or of two such bit vectors approximated the extent of the phonetic difference between the corresponding words.[9] Judging control structuresAll early presentations of the control structure of a TUTOR judging block were confusing. In modern terms, however, a judging block can be described as an iterative control structure that exits when the student input is judged correct. The body
of this control structure consists of a series of cases, each introduced by a pattern matching command such as Consider this example:[10] wrong <it, is,a> square
at 1501
write A square has four
sides.
In the event that the student inputs "square" or "a square", the answer is judged to be incorrect, and the text "A square has four sides." is output starting at line 15 column 1 on the screen. This output remains on the screen until the student begins to enter a new answer, at which point, it is erased so that the response to the new answer can be computed. The mechanism by which the display screen rolls back to its previous state varies from implementation to implementation. Early implementations operated by switching the terminal into erase mode and re-executing the entire case that had matched. Some later implementations buffered the output produced during judging so that this output could be erased. The Graphic and display commandsThe PLATO IV student terminal[12] had a 512 by 512 pixel plasma display panel, with hardware support for point plotting, line drawing, and text display. Each pixel on the PLATO IV terminal was either orange or black. The CDC PLATO V terminal used a monochrome black and white CRT to emulate the plasma panel. The built-in character set had 4 sets of 63 characters, each 8 by 16 pixels, half of these were fixed, half were programmable. The Tutor language provided complete support for this terminal. There were two coordinate systems[13]
Drawing commandsThe following example illustrates some of Tutor's drawing commands.[14] draw 1812;1852;skip;1844;1544
circle 16,344,288
draw 1837;1537;1535;1633;1833
Note the use of semicolons to separate successive coordinates on the The tags on the Hand composing draw commands is difficult, so a picture editor was included in the PLATO system by 1974 to automate this work.[15] This could only deal with drawing commands with constant coordinates. Text rendering commandsThe following example illustrates some of the text rendering tools of Tutor.[16] 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 rendered in size zero rotation zero used the built-in character rendering hardware of the PLATO terminal, while rendering with nonzero size and rotation was done with line segments and therefore significantly slower due to the speed of the communication link to the terminal. Control structuresAside from its unique answer judging mechanisms, TUTOR's original set of control structures was rather sparse. In the mid 1970s, this shortcoming was addressed by introducing This is illustrated in the following example:[17] 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
(The assignment arrow in the The same syntax was used for 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
Note that the Expression syntaxTUTOR's expression syntax did not look back to the syntax of FORTRAN, nor was it limited by poorly designed character sets of the era. For example, the PLATO IV character set included control characters for subscript and superscript, and TUTOR used these for exponentiation. Consider this command[19] circle (412+72.62)1/2,100,200 The character set also included the conventional symbols for multiplication and division, The language included a pre-defined constant named with the Greek letter pi (π), with the appropriate value, which could be used in calculations. Thus, the expression In TUTOR, the floating-point comparison Memory managementAs an authoring language, TUTOR began with only minimal memory resources and only the crudest tools for manipulating them. Each user process had a private data segment of 150 variables, and shared common blocks could be attached, allowing inter-user communication through shared memory. On the PLATO IV system, words were 60 bits, in keeping with the CDC 6600 family of computers. Some later implementations changed this to 64 bits.[22] Basic memory resourcesThe private memory region of each process consisted of 150 words each, referred to as student variables; the values of these variables were persistent, following the individual user from session to session. These were addressed as A TUTOR lesson could attach a single region of up to 1500 words of shared memory using the Where 150 student variables was insufficient, a lesson could use the
common 1000
storage 75
stoload vc1001,1,75
This example defines Defining symbolic namesThe Tutor define mynames
first=v1, second =v2
result=v3
This creates a set of definitions named Functions could be defined, with macro-substitution semantics, as in this illustration:[28] define cotan(a)=cos(a)/sin(a)
Unlike C, the original scope rules of TUTOR were pure "definition before use" with no provisions for local definitions. Thus, the formal parameter Later in the development of TUTOR, with the introduction of multiple named sets of definitions, the programmer was given explicit control over which sets of definitions were currently in force. For example, Arrays, packed arrays, and text manipulationThe original TUTOR tools for text manipulation were based on commands for specific text operations, for example, define segment, name=starting var, num bits per byte, s
array, name(size)=starting var
array, name (num rows, num columns)=starting var
Segmented arrays, defined with the keyword Parameter passingA general parameter passing mechanism was added to TUTOR early in the PLATO IV era. For example:[32] 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
Notice that the formal parameters listed in the argument list to the Local variablesLocal variables were added to TUTOR some time around 1980. Lesson authors wishing to use local variables were required to use the 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
The continuation lines of the Other implementationsThere has been a sizable family of TUTOR-related languages, each similar to the original TUTOR language but with differences. In particular, TUTOR was a component of a system (the PLATO computer-based education system) that ran on particular CDC mainframe hardware. For efficiency, there were some hardware-specific elements in TUTOR (e.g. variables that were 60-bit words that could be used as arrays of 60 bits or as 10 six-bit characters, etc.). Also, TUTOR was designed before the advent of the windows-oriented graphical user interface (GUI). The microTutor language was developed in the PLATO project at UIUC to permit portions of a lesson to run in terminals that contained microcomputers, with connections to TUTOR code running on the mainframe. The microTutor dialect was also the programming language of the Cluster system developed at UIUC and licensed to TDK in Japan; the Cluster system consisted of a small group of terminals attached to a minicomputer which provided storage and compilation. The Tencore Language Authoring System is a TUTOR derivative developed by Paul Tenczar for PCs and sold by Computer Teaching Corporation. cT was a derivative of TUTOR and microTutor developed at Carnegie Mellon which allowed programs to run without change in windowed GUI environments on Windows, Mac, and Unix/Linux systems. The Pterm terminal emulator developed by Cyber1 supports the microTutor language starting with version 6.[35][36] Citations
References
Further reading
|