TUTOR, also known as PLATO Author Language, is a
programming language
A programming language is a system of notation for writing computer programs. Most programming languages are text-based formal languages, but they may also be graphical. They are a kind of computer language.
The description of a programming ...
developed for use on the
PLATO system
Plato ( ; grc-gre, Πλάτων ; 428/427 or 424/423 – 348/347 BC) was a Greek philosopher born in Athens during the Classical period in Ancient Greece. He founded the Platonist school of thought and the Academy, the first institution ...
at the
University of Illinois at Urbana-Champaign
The University of Illinois Urbana-Champaign (U of I, Illinois, University of Illinois, or UIUC) is a public land-grant research university in Illinois in the twin cities of Champaign and Urbana. It is the flagship institution of the Univ ...
beginning in roughly 1965. TUTOR was initially designed by
Paul Tenczar
Paul may refer to:
*Paul (given name), a given name (includes a list of people with that name)
*Paul (surname), a list of people
People
Christianity
* Paul the Apostle (AD c.5–c.64/65), also known as Saul of Tarsus or Saint Paul, early Chri ...
for use in
computer assisted instruction
Educational technology (commonly abbreviated as edutech, or edtech) is the combined use of computer hardware, software, and educational theory and practice to facilitate learning. When referred to with its abbreviation, edtech, it often refer ...
(CAI) and
computer managed instruction
Educational technology (commonly abbreviated as edutech, or edtech) is the combined use of computer hardware, software, and educational theory and practice to facilitate learning. When referred to with its abbreviation, edtech, it often refer ...
(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, which runs most of the source code from 1980s PLATO and has roughly 5000 users as of June 2020.
Origins and development
TUTOR 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
Plato ( ; grc-gre, Πλάτων ; 428/427 or 424/423 – 348/347 BC) was a Greek philosopher born in Athens during the Classical period in Ancient Greece. He founded the Platonist school of thought and the Academy, the first institution ...
in the later days of Plato III.
The first documentation of the language, under this name, appears to have been ''The TUTOR Manual'', CERL Report X-4, by R. A. Avner and P. Tenczar, Jan. 1969.
The article ''Teaching the Translation of Russian by Computer'' 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
WRUSS
for "write using the Russian character set."
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.
As a result, once new versions of TUTOR were developed, maintaining compatibility with the PLATO version could be very difficult.
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.
Structure of a TUTOR lesson
A 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
COBOL (; an acronym for "common business-oriented language") is a compiled English-like computer programming language designed for business use. It is an imperative, procedural and, since 2002, object-oriented language. COBOL is primarily us ...
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
do
or
join
commands.
Here is an example unit from page 5 of the ''TUTOR User's Memo'', March 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
Several things should be immediately apparent from this example.
* First, TUTOR is a fixed format language. Each line begins with a command name, which must fit within a fixed 8-character field for the command name. The arguments to that command (the ''tag'') begin at the 9th character. Although a tab key was be used to get to the 9th column, it generated spaces as plato had no tab character.
* In some cases, such as the
write
command above, the tag may consist of multiple lines. Continuation lines are either blank or have a leading tab.
* Screen coordinates are presented as single numbers, so 205 refers to line 2 column 5, and 413 refers to line 4 column 13.
What may not be apparent is the control structure implicit in this unit. The
arrow
command marks the entrance to a ''judging block'' This control structure is one of TUTOR's unique features.
Unique features
TUTOR 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 judging
A ''judging block'' in TUTOR is a control structure that begins with an
arrow
command and ends with the next
arrow
,
endarrow
or
unit
command. The
arrow
command also prompts for input, with the special arrow character (resembling "▷") displayed as a prompt at the indicated screen coordinates. In effect, a judging block can be thought of as a backtracking control structure where the student may make multiple attempts to answer a question until a correct answer allows forward progress.
Judging pattern matching
Each judging block consists of a sequence of
pattern matching
In computer science, pattern matching is the act of checking a given sequence of tokens for the presence of the constituents of some pattern. In contrast to pattern recognition, the match usually has to be exact: "either it will or will not be ...
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
answer
and
wrong
. These had identical pattern matching semantics except that
answer
judged a student response to be correct if it matched, while
wrong
judged a student response to be incorrect.
The tag fields on the
answer
and
wrong
commands consisted of lists of optional, required and alternative words. consider this example from exercise 4-1 in the 1973 ''TUTOR User's Memo'':
answer
(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
specs
command to set how pedantic the system was about spelling errors.
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 vector
A bit array (also known as bitmask, bit map, bit set, bit string, or bit vector) is an array data structure that compactly stores bits. It can be used to implement a simple set data structure. A bit array is effective at exploiting bit-level p ...
s. To see whether a word of student input matched a word of the pattern, the
Hamming distance
In information theory, the Hamming distance between two strings of equal length is the number of positions at which the corresponding symbols are different. In other words, it measures the minimum number of ''substitutions'' required to chan ...
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
Exclusive or or exclusive disjunction is a logical operation that is true if and only if its arguments differ (one is true, the other is false).
It is symbolized by the prefix operator J and by the infix operators XOR ( or ), EOR, EXOR, , ...
of two such bit vectors approximated the extent of the phonetic difference between the corresponding words.
Judging control structures
All 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
In computer science, pattern matching is the act of checking a given sequence of tokens for the presence of the constituents of some pattern. In contrast to pattern recognition, the match usually has to be exact: "either it will or will not be ...
command such as
answer
or
wrong
. All output produced by the body of the judging loop in the
previous cycle is erased from the screen prior to the next cycle.
Consider this example, from exercise 4-1 of the 1973 ''TUTOR User's Memo'':
wrong 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
join
command was a unique form of subroutine call. It was defined as being equivalent to textual substitution of the body of the joined unit in place of the join command itself (page 21, 1973 ''TUTOR User's Memo''). As such, a joined unit could contain part of a judging block. Thus, while the judging block is conceptually an
iterator
In computer programming, an iterator is an object that enables a programmer to traverse a container, particularly lists. Various types of iterators are often provided via a container's interface. Though the interface and semantics of a given iterat ...
enclosing a series of
cases, this block may be arbitrarily broken into subroutines. (An alternative subroutine call, the
do
command, conformed to the usual semantics associated with subroutine calls in other programming languages.)
Graphic and display commands
The PLATO IV student terminal had a 512 by 512
pixel
In digital imaging, a pixel (abbreviated px), pel, or picture element is the smallest addressable element in a raster image, or the smallest point in an all points addressable display device.
In most digital display devices, pixels are the ...
plasma display panel
A plasma display panel (PDP) is a type of flat panel display that uses small cells containing plasma: ionized gas that responds to electric fields. Plasma televisions were the first large (over 32 inches diagonal) flat panel displays to be release ...
,
with hardware support for
point plotting
Point plotting is an elementary mathematical skill required in analytic geometry. Invented by René Descartes and originally used to locate positions on military maps, this skill is now assumed of everyone who wants to locate grid 7A on any map.
...
, 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 system
In geometry, a coordinate system is a system that uses one or more numbers, or coordinates, to uniquely determine the position of the points or other geometric elements on a manifold such as Euclidean space. The order of the coordinates is sig ...
s (see page II-1 of ''The TUTOR Language'' by Bruce Sherwood):
* Coarse coordinates were specified in terms of the rows and columns of text. The coarse coordinate 1501, for example, was a reference to line 15 character 1, where the upper left character on the screen was at location 101 and the lower right character was at 3264.
* Fine coordinates were specified as X and Y coordinates relative to the lower left corner of the screen. The fine coordinate 0,511 specified the upper left corner of the screen, while 0,496 was equivalent to the coarse 101, allowing for the 16 pixel height of a character and the fact that characters were plotted relative to their lower left corner.
Drawing commands
The following example illustrates some of Tutor's drawing commands.
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
draw
command. This allows unambiguous use of comma-separated fine coordinates. Normally, the draw command connects consecutive points with line segments, but by putting
skip
in the tag, the
draw
command could be made to conceptually lift its pen.
The tags on the
circle
command give the radius and fine coordinates of the center. Additional tags could specify starting and
ending angles for partial circles.
Hand composing draw commands is difficult, so a picture editor was included in the PLATO system by 1974 to automate this work. This could only deal with drawing commands with constant coordinates.
Text rendering commands
The following example illustrates some of the text rendering tools of 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 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 structures
Aside from its unique answer judging mechanisms, TUTOR's original set of
control structures
In computer science, control flow (or flow of control) is the order in which individual statements, instructions or function calls of an imperative program are executed or evaluated. The emphasis on explicit control flow distinguishes an ''imp ...
was rather sparse. In the mid 1970s, this shortcoming was addressed by introducing
if
,
endif
blocks with optional
elseif
and
else
sections. The semantics of these control structures was routine, but the syntax inherited the mandatory
indentation
__FORCETOC__
In the written form of many languages, an indentation or indent is an empty space at the beginning of a line to signal the start of a new paragraph. Many computer languages have adopted this technique to designate "paragraphs" or o ...
of the Tutor Language, presaging that of
Python
Python may refer to:
Snakes
* Pythonidae, a family of nonvenomous snakes found in Africa, Asia, and Australia
** ''Python'' (genus), a genus of Pythonidae found in Africa and Asia
* Python (mythology), a mythical serpent
Computing
* Python (pro ...
and adding a unique nonblank indent character to distinguish indenting from continuation lines.
This is illustrated in the following example, from page S5 of the ''Summary of TUTOR Commands and System Variables (10th ed)'' by
Elaine Avner
Elaine Sweital Avner (June 26, 1938 – June 10, 2017) was an American astronomer and computer-assisted instruction developer who worked for many years at the University of Illinois at Urbana–Champaign.
Elaine Sweital was originally from Phila ...
, 1981:
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
Assignment, assign or The Assignment may refer to:
* Homework
* Sex assignment
* The process of sending National Basketball Association players to its development league; see
Computing
* Assignment (computer science), a type of modification to ...
arrow in the
calc
statement is not rendered correctly in some browsers. It appears similar to <= but as one character. It had a dedicated key on the PLATO IV keyboard.)
The same syntax was used for
loop
,
endloop
blocks with semantics comparable to
while loop
In most computer programming languages, a while loop is a control flow statement that allows code to be executed repeatedly based on a given Boolean condition. The ''while'' loop can be thought of as a repeating if statement.
Overview
The ' ...
s in conventional programming languages. This is illustrated in the following example, from page S6 of the ''Summary of TUTOR Commands and System Variables (10th ed)'' by Elaine Avner, 1981:
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
reloop
and
outloop
commands are somewhat analogous to the
continue
and
break
statements of languages based on
C, except that they must sit at the indenting level of the loop they modify, and they have a condition tag that indicates when the indicated control transfer is to take place. This makes the construct more powerful than in other languages, because any line of the inner loop could terminate or reloop several outer loops with one statement.
Expression syntax
TUTOR'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
A subscript or superscript is a character (such as a number or letter) that is set slightly below or above the normal line of type, respectively. It is usually smaller than the rest of the text. Subscripts appear at or below the baseline, whil ...
, and TUTOR used these for exponentiation. Consider this command (from page IV-1 of ''The TUTOR Language'', Sherwood, 1974):
circle (41
2+72.6
2)
1/2,100,200
The character set also included the conventional symbols for multiplication and division,
×
and
÷
, but in a more radical departure from the conventions established by FORTRAN, it allowed implicit multiplication, so the expressions
(4+7)(3+6)
and
3.4+5(23-3)/2
were valid, with the values 99 and 15.9, respectively (op cit). This feature was seen as essential. When students typed in a numeric answer to a question, they could use operators and variables and standard algebraic notation, and the program would use the TUTOR "compute" command to compile and run the formula and check that it was numerically equivalent (or within the floating point roundoff error) to the correct answer.
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
πr2
could be used to calculate the area of a circle, using the built-in π constant, implicit multiplication and exponentiation indicated by a superscript.
In TUTOR, the floating-point comparison
x=y
was defined as being true if
x
and
y
were approximately equal (see page C5 of ''PLATO User's Memo, Number One'' by Avner, 1975). This simplified life for mathematically naïve developers of instructional lessons, but it occasionally caused headaches for developers of numerically sophisticated code because it was possible that both
x<y
and
x≥y
could be true at the same time.
Memory management
As 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
The CDC 6600 was the flagship of the 6000 series of mainframe computer systems manufactured by Control Data Corporation. Generally considered to be the first successful supercomputer, it outperformed the industry's prior recordholder, the IBM ...
family of computers. Some later implementations changed this to 64 bits.
Basic memory resources
The 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
n1
through
n150
when used to hold integer values, or as
v1
through
v150
when used to hold floating point values.
A TUTOR lesson could attach a single region of up to 1500 words of shared memory using the
common
command. Each lesson could have an unnamed temporary common block containing variables shared by all users of that lesson. Such blocks were created when a lesson came into use and deallocated when the lesson became inactive. In contrast, named common blocks were associated with a block of a lesson (a disk file). Shared memory was addressed as
nc1
through
nc1500
(for integers) or
vc1
through
vc1500
(for floating point numbers).
Where 150 student variables was insufficient, a lesson could use the
storage
command to create an additional private memory segment of up to 1000 words. This segment existed in swap space only, but it could be mapped to student variables or common variables. For example (from page X-11 of ''The TUTOR Language'', Sherwood, 1974):
common 1000
storage 75
stoload vc1001,1,75
This example defines
nc1
to
nc1000
as a shared unnamed common block, while
nc1001
to
nc1075
are private storage.
Defining symbolic names
The Tutor
define
command was very similar to the
C #define
preprocessor
In computer science, a preprocessor (or precompiler) is a program that processes its input data to produce output that is used as input in another program. The output is said to be a preprocessed form of the input data, which is often used by so ...
directive. This was the only way to associate mnemonic names with variables. It was up to the programmer to statically allocate memory and assign names to variables. Consider this example from page 17 of the ''TUTOR User's Memo -- Introduction to TUTOR'', 1973"
define mynames
first=v1, second =v2
result=v3
This creates a set of definitions named
mynames
defining three floating point variables. Users were advised that "
there should not be any v3's or v26's anywhere in your lesson except in the define
statement itself. Put all your definitions at the very beginning of the lesson where you will have ready reference to which variables you are using." (underlining from the original, page IV-5 of ''The TUTOR Language'', Sherwood, 1974.)
Functions could be defined, with macro-substitution semantics, as in this illustration from page IX-2 of ''The TUTOR Language'', Sherwood, 1974:
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
a
used above must not have any previous definition.
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,
define purge, setname
would discard all definitions in the named set.
Arrays, packed arrays, and text manipulation
The original TUTOR tools for text manipulation were based on commands for specific text operations, for example,
pack
to place a packed character string into consecutive variables in memory,
search
to search for one string within another, and
move
to move a string from memory to memory. By 1975, more general tools for arrays of integers and packed arrays were added. Page 14 of ''PLATO User's Memo -- Summary of TUTOR Commands and System Variables'', Avner, 1975, gives the following:
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
segment
, were comparable to packed arrays in
Pascal. The byte size and whether or not the array elements were to be treated as signed or unsigned were entirely under user control. Arbitrary text manipulation could be done by setting the byte size to the machine byte size, 6 bits on implementations using
display code Display code is the six-bit character code used by many computer systems manufactured by Control Data Corporation, notably the CDC3000 series and the following CDC 6000 series in 1964. The CDC 6000 series and their successors had 60 bit words. A ...
, 8 bits on some later
ASCII
ASCII ( ), abbreviated from American Standard Code for Information Interchange, is a character encoding standard for electronic communication. ASCII codes represent text in computers, telecommunications equipment, and other devices. Because of ...
and
extended ASCII implementations. Note the lack of any specification of array dimensionality for segmented arrays.
Parameter passing
A general
parameter passing mechanism was added to TUTOR early in the PLATO IV era. Page IV-10 of ''The TUTOR Language'' by Sherwood, 1974 gives the following example:
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
unit
command are simply the defined names for statically allocated global variables. The semantics of parameter passing was given as being equivalent to assignment at the time of the control transfer to the destination unit, and if
actual parameters were omitted, as in the second
do
command above, the effect was to leave the prior values of the corresponding formal parameters unchanged.
Local variables
Local variable
In computer science, a local variable is a variable that is given ''local scope''. A local variable reference in the function or block in which it is declared overrides the same variable name in the larger scope. In programming languages with o ...
s were added to TUTOR some time around 1980. Lesson authors wishing to use local variables were required to use the
lvars
command to declare the size of the buffer used for local variables, up to 128 words.
[Page C3 of ''Summary of TUTOR Commands and System Variables'', Avner, 1981] Having done so, a unit using local variables could begin as follows (from Page C2 of ''Summary of TUTOR Commands and System Variables'', 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
The continuation lines of the
unit
command given above are taken to be lines of an implicit
define
command with local
scope
Scope or scopes may refer to:
People with the surname
* Jamie Scope (born 1986), English footballer
* John T. Scopes (1900–1970), central figure in the Scopes Trial regarding the teaching of evolution
Arts, media, and entertainment
* Cinem ...
. Conventional definitions in terms of student variables such as
n150
could be used in such a local
define
, but the forms illustrated here all automatically bind names to locations in the block of memory allocated by the
lvars
command. The available TUTOR documentation does not discuss how local variables are allocated.
Other implementations
There 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.
References
External links
PLATO User's Guide CDC Corporation, Revised April, 1981.
TUTOR User's Memo. Introduction to TUTOR Computer-Based Education Research Laboratory, University of Illinois at Urbana Champaign, March 1973.
PLATO User's Memo, Number One: Summary of TUTOR Commands and System Variables. Third Edition by Elaine Avner, Computer-Based Education Research Laboratory, University of Illinois at Urbana Champaign, November, 1975.
Summary of TUTOR Commands and System Variables (10th edition) by Elaine Avner, Computer-Based Education Research Laboratory, University of Illinois at Urbana Champaign, November, 1981.
A personal evaluation of the PLATO systembu Stewart A. Denenberg, ''ACM SIGCUE Outlook, 12,'' 2 (April 1978) pages 3–10.
Run Time Support for the TUTOR Language on a Small Computer System by
Douglas W. Jones
Douglas W. Jones is an American computer scientist at the University of Iowa. His research focuses primarily on computer security, particularly electronic voting.
Jones received a Bachelor of Science, B.S. in physics from Carnegie Mellon Univer ...
, 1976.
The TUTOR Language by Bruce Sherwood, Computer-Based Education Research Laboratory, University of Illinois at Urbana Champaign, June 1974.
The TUTOR Language by Bruce Sherwood, Control Data Education Company, 1977.
The Plato IV Student Terminal by Jack Stifle
from Center for Design of Educational Computing at Carnegie Mellon University, by David Andersen, Bruce Sherwood, Judith Sherwood, and Kevin Whitley (no longer supported as of 2002).
{{Authority control
Computer-based Education Research Laboratory
Educational programming languages