НАУЧНИК - TUTOR

УЧИТЕЛЬ
Парадигма императивный ( процессуальный )
Разработано Поль Тенцар и Рихард Бломм
Разработчик Пол Тенцар и Иллинойсский университет в Урбане-Шампейн
Впервые появился 1969 г. ( 1969 )
Печатная дисциплина никто
Основные реализации
НАУЧНИК, МИКРОУЧИТЕЛЬ
Под влиянием
TenCORE , ИСПОЛЬЗОВАНИЕ ( Regency Systems )

TUTOR , также известный как PLATO Author Language , - это язык программирования, разработанный для использования в системе PLATO в Университете Иллинойса в Урбана-Шампейн, начиная примерно с 1965 года. TUTOR был первоначально разработан Полом Тенцаром для использования в компьютерных инструкциях (CAI). и компьютерное обучение (CMI) (в компьютерных программах, называемых «уроками») и имеет много функций для этой цели. Например, TUTOR имеет мощные команды анализа и оценки ответов, графику и функции, упрощающие работу преподавателей с записями и статистикой учащихся. Гибкость TUTOR в сочетании с вычислительной мощностью PLATO (работающая на том, что в 1972 году считалось суперкомпьютером), также сделала его подходящим для создания игр, включая авиасимуляторы, военные игры, многопользовательские ролевые игры в стиле подземелий, карточные игры, словесные игры. игры и медицинские обучающие игры, такие как Bugs and Drugs ( BND ). TUTOR живет сегодня как язык программирования для системы Cyber1 PLATO, которая запускает большую часть исходного кода из PLATO 1980-х годов и насчитывает около 5000 пользователей по состоянию на июнь 2020 года.

Истоки и развитие

TUTOR изначально разрабатывался как специальный авторский язык для разработки учебных уроков, и его превращение в язык программирования общего назначения не было запланировано. Имя TUTOR впервые было применено к авторскому языку системы PLATO в последние дни Платона III. Первой документацией по языку под этим названием, по-видимому, является The TUTOR Manual , CERL Report X-4, RA Avner и P. Tenczar, январь 1969.

В статье « Обучение переводу русского языка с помощью компьютера» приводится снимок TUTOR незадолго до того, как PLATO IV был введен в эксплуатацию. Присутствовали основные элементы языка, но команды давались в верхнем регистре, и вместо использования общего механизма поддержка альтернативных наборов символов осуществлялась через специальные имена команд, такие как WRUSS«запись с использованием набора символов русского языка».

В 1970-е годы разработчики TUTOR воспользовались тем фактом, что весь корпус программ TUTOR хранился в режиме онлайн в одной и той же компьютерной системе. Всякий раз, когда они чувствовали необходимость изменить язык, они запускали программное обеспечение для преобразования корпуса кода TUTOR, чтобы пересмотреть весь существующий код, чтобы он соответствовал внесенным ими изменениям. В результате после разработки новых версий TUTOR поддерживать совместимость с версией PLATO может быть очень сложно.

Control Data Corporation (CDC) к 1981 году в значительной степени исключила имя TUTOR из своей документации PLATO. Они назвали сам язык языком авторов PLATO . Фраза TUTOR file или даже TUTOR Lesson file сохранилась, однако, как имя типа файла, используемого для хранения текста, написанного на языке PLATO Author.

Структура урока НАУЧНИКА

Урок НАУЧНИКА состоит из последовательности блоков, где каждый блок начинается с представления информации, и переход от одного блока к другому зависит от правильного ответа на один или несколько вопросов. Как и в случае с параграфами COBOL , управление может войти в модуль TUTOR из предыдущего модуля и выйти в следующий, но модули также могут быть вызваны как подпрограммы с помощью команд doили join.

Вот пример блока со страницы 5 памятки пользователя TUTOR , март 1973 ( Лаборатория компьютерных исследований в области образования , Иллинойсский университет в Урбане-Шампейне):

unit    math
at      205
write   Answer these problems

        3 + 3 =

        4 × 3 =

arrow   413
answer  6
arrow   613
answer  12

Несколько вещей должны быть сразу очевидны из этого примера.

  • Во-первых, TUTOR - это язык с фиксированным форматом. Каждая строка начинается с имени команды, которое должно соответствовать фиксированному 8-значному полю для имени команды. Аргументы этой команды ( тега ) начинаются с 9-го символа. Хотя для перехода к 9-му столбцу использовалась клавиша табуляции, она генерировала пробелы, поскольку у plato не было символа табуляции.
  • В некоторых случаях, например, в приведенной writeвыше команде, тег может состоять из нескольких строк. Строки продолжения либо пустые, либо имеют начальную табуляцию.
  • Координаты экрана представлены отдельными числами, поэтому 205 относится к строке 2 столбца 5, а 413 относится к строке 4 столбца 13.

Что может быть неочевидным, так это структура управления, заложенная в этом модуле. Команда arrowотмечает вход в судейский блок. Эта структура управления - одна из уникальных особенностей TUTOR.

Уникальные черты

TUTOR содержит ряд уникальных функций. Следующий список не предназначен для замены учебного пособия для РУКОВОДИТЕЛЯ, а просто выделяет наиболее интересные, новаторские и иногда сбивающие с толку особенности языка.

Ответ судейство

Судя блок в TUTOR представляет собой структуру управления , которая начинается с arrowкомандой и заканчивается следующей arrow, endarrowили unitкомандой. Команда arrowтакже запрашивает ввод со специальным символом стрелки (похожим на «▷»), отображаемым в качестве подсказки в указанных координатах экрана. Фактически, оценочный блок можно рассматривать как структуру управления с обратным прослеживанием, где ученик может делать несколько попыток ответить на вопрос, пока правильный ответ не позволит продвинуться вперед.

Оценка соответствия шаблону

Каждый оценочный блок состоит из последовательности команд сопоставления с образцом , каждая из которых вводит (возможно, пустой) блок команд, который должен быть выполнен, если этот образец совпадает. Двумя наиболее распространенными командами сопоставления с образцом были answerи wrong. У них была идентичная семантика сопоставления с образцом, за исключением того, что answerответ студента оценивался как правильный, если он соответствовал, а wrongответ студента оценивался как неправильный.

Поля метки на answerи wrongкоманды состояли из списков дополнительных, необходимых и альтернативных слов. рассмотрим этот пример из упражнения 4-1 в памятке пользователя TUTOR 1973 года :

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

Это соответствовало бы таким ответам, как «это прямоугольный треугольник», «это треугольная фигура» или просто «правый треугольник». Он не будет соответствовать «вроде треугольника», потому что слова «вроде» не указаны как игнорируемые, и он не будет соответствовать «треугольнику, верно?» потому что заказ неправильный.

Подсистема сопоставления с образцом распознала орфографические ошибки, поэтому слова «треугольник» или «треугольник» будут соответствовать образцу в примере. Автор урока мог использовать эту specsкоманду, чтобы указать, насколько педантичной была система в отношении орфографических ошибок.

Алгоритмы сопоставления с образцом, используемые различными реализациями TUTOR, различались в деталях, но обычно каждое слово во входном тексте и каждое слово в образце преобразовывались в битовые векторы . Чтобы увидеть, совпадает ли введенное студентом слово со словом в шаблоне, расстояние Хэмминга между двумя битовыми векторами использовалось как мера степени различия между словами. Битовые векторы обычно имели длину 60 или 64 бита с полями для указания наличия букв, присутствия пары букв и первой буквы. В результате количество единичных битов в двух таких битовых векторах исключающего ИЛИ приблизительно соответствует степени фонетической разницы между соответствующими словами.

Судейские контрольные структуры

Все ранние представления контрольной структуры блока судейства TUTOR сбивали с толку. Однако, используя современные термины, оценочный блок можно описать как итеративную структуру управления, которая завершается, когда вводимые студентом данные признаны правильными. Тело этой управляющей структуры состоит из серии наблюдений , каждый из которых вводится командой сопоставления с образцом, такой как answerили wrong. Весь вывод, произведенный основной частью цикла оценки в предыдущем цикле, стирается с экрана перед переходом к следующему циклу.

Рассмотрим этот пример из упражнения 4-1 памятки пользователя TUTOR 1973 года :

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

В том случае, если учащийся вводит «квадрат» или «квадрат», ответ считается неправильным, и текст «У квадрата четыре стороны». выводится, начиная со строки 15 столбца 1 на экране. Этот вывод остается на экране до тех пор, пока ученик не начинает вводить новый ответ, после чего он стирается, чтобы можно было вычислить ответ на новый ответ. Механизм, с помощью которого экран дисплея возвращается в свое предыдущее состояние, варьируется от реализации к реализации. Ранние реализации работали путем переключения терминала в режим стирания и повторного выполнения всего совпавшего случая. Некоторые более поздние реализации буферизовали вывод, полученный во время оценки, чтобы этот вывод можно было стереть.

Команда joinбыла уникальной формой вызова подпрограммы. Это было определено как эквивалентное текстовой подстановке тела объединенного модуля вместо самой команды соединения (стр. 21, Заметка пользователя TUTOR 1973 г. ). Таким образом, объединенная единица может содержать часть судейского блока. Таким образом, хотя блок оценки концептуально является итератором, охватывающим серию наблюдений , этот блок можно произвольно разбить на подпрограммы. (Альтернативный вызов подпрограммы, doкоманда, соответствовала обычной семантике, связанной с вызовами подпрограмм в других языках программирования.)

Графические и дисплейные команды

Студенческий терминал PLATO IV имел плазменную панель размером 512 на 512 пикселей с аппаратной поддержкой точечного построения , рисования линий и отображения текста. Каждый пиксель на терминале PLATO IV был оранжевым или черным. Терминал CDC PLATO V использовал монохромный черно-белый ЭЛТ для имитации плазменной панели. Встроенный набор символов имел 4 набора из 63 символов, каждый 8 на 16 пикселей, половина из них была фиксированной, половина - программируемой. Язык Tutor обеспечивает полную поддержку этого терминала.

Было две системы координат (см. Стр. II-1 книги Брюса Шервуда The TUTOR Language ):

  • Грубые координаты были указаны в терминах строк и столбцов текста. Грубая координата 1501, например, была ссылкой на символ 1 строки 15, где верхний левый символ на экране находился в позиции 101, а нижний правый символ был в позиции 3264.
  • Точные координаты были указаны как координаты X и Y относительно левого нижнего угла экрана. Точная координата 0,511 определяла верхний левый угол экрана, а 0,496 была эквивалентна грубой 101, учитывая высоту символа в 16 пикселей и тот факт, что символы были нанесены относительно их нижнего левого угла.

Команды рисования

В следующем примере показаны некоторые команды рисования Tutor.

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

Обратите внимание на использование точек с запятой для разделения последовательных координат в drawкоманде. Это позволяет однозначно использовать точные координаты, разделенные запятыми. Обычно команда рисования соединяет последовательные точки с отрезками линии, но, вставив skipтег, drawкоманда может концептуально приподнять перо.

Теги в circleкоманде указывают радиус и точные координаты центра. Дополнительные теги могут указывать начальный и конечный углы для частичных окружностей.

Составлять команды рисования вручную сложно, поэтому к 1974 году в систему PLATO был включен редактор изображений, чтобы автоматизировать эту работу. Это могло иметь дело только с командами рисования с постоянными координатами.

Команды отрисовки текста

В следующем примере показаны некоторые инструменты визуализации текста 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

Для текста, отображаемого с нулевым вращением и нулевым размером, использовалось встроенное оборудование для визуализации символов терминала PLATO, тогда как визуализация с ненулевым размером и вращением выполнялась с линейными сегментами и, следовательно, значительно медленнее из-за скорости канала связи с терминалом.

Структуры управления

Помимо уникальных механизмов оценки ответов, исходный набор управляющих структур TUTOR был довольно скудным. В середине 1970 - х годов, этот недостаток был адресован путем введения if, endifблоки с опциональным elseifи elseсекций. Семантика этих управляющих структур была рутинной, но синтаксис унаследовал обязательный отступ языка Tutor Language, предполагающий отступ Python и добавляющий уникальный непустой символ отступа, чтобы отличать отступ от строк продолжения.

Это показано в следующем примере, со страницы S5 в Резюме Tutor команд и системных переменных (10 ЕД) по Элейн Авнер , 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

( Стрелка присваивания в calcинструкции не отображается правильно в некоторых браузерах. Она похожа на <=, но как один символ. На клавиатуре PLATO IV для нее была выделенная клавиша.)

Же синтаксис был использован для loop, endloopблоков с семантикой сравнимы с в то время как циклы в обычных языках программирования. Это проиллюстрировано в следующем примере со страницы S6 Краткого обзора команд и системных переменных TUTOR (10-е изд) Элейн Авнер, 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

Обратите внимание , что reloopи outloopкоманды - то аналогичны continueи breakутверждения языков , основанных на C , за исключением того, что они должны сидеть на отступов уровне цикла они изменяют, и у них есть условие тег , который указывает , когда указанная передача управления пройдет . Это делает конструкцию более мощной, чем в других языках, потому что любая строка внутреннего цикла может завершить или повторно выполнить несколько внешних циклов с помощью одного оператора.

Синтаксис выражения

Синтаксис выражений TUTOR не обращался к синтаксису FORTRAN и не ограничивался плохо спроектированными наборами символов той эпохи. Например, набор символов PLATO IV включал управляющие символы для нижнего и верхнего индекса , а TUTOR использовал их для возведения в степень. Рассмотрим эту команду (со страницы IV-1 The TUTOR Language , Sherwood, 1974):

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

Набор символов также включал обычные символы для умножения и деления, ×и ÷, но в более радикальном отходе от соглашений, установленных FORTRAN, он допускал неявное умножение, поэтому выражения (4+7)(3+6)и были действительными со значениями 99 и 15.9, соответственно (op чит). Эта функция считалась важной. Когда студенты вводили числовой ответ на вопрос, они могли использовать операторы и переменные и стандартную алгебраическую нотацию, а программа использовала команду TUTOR «вычислить» для компиляции и запуска формулы и проверки ее числового эквивалента (или в пределах ошибка округления с плавающей запятой) к правильному ответу. 3.4+5(23-3)/2

Язык включал предопределенную константу, названную греческой буквой «пи» (π), с соответствующим значением, которое можно было использовать в вычислениях. Таким образом, выражение можно использовать для вычисления площади круга с использованием встроенной константы π, неявного умножения и возведения в степень, обозначенных верхним индексом. πr2

В TUTOR сравнение с плавающей запятой x=yбыло определено как истинное, если xи yбыли приблизительно равны (см. Стр. C5 памятки пользователя PLATO, номер один , Авнер, 1975). Это упростило жизнь математически наивным разработчикам учебных уроков, но время от времени вызывало головную боль у разработчиков сложного в числовом отношении кода, потому что было возможно, что и то, x<yи другое x≥yможет быть истинным одновременно.

Управление памятью

Как язык разработки, TUTOR начинал с минимальных ресурсов памяти и только самых грубых инструментов для управления ими. Каждый пользовательский процесс имел частный сегмент данных из 150 переменных, и могли быть присоединены общие общие блоки , что позволяло межпользовательское взаимодействие через общую память.

В системе PLATO IV слова были 60-битными, в соответствии с семейством компьютеров CDC 6600 . В некоторых более поздних реализациях это значение было изменено на 64 бита.

Базовые ресурсы памяти

Область частной памяти каждого процесса состояла из 150 слов каждое, называемых переменными студента; значения этих переменных были постоянными, отслеживая индивидуального пользователя от сеанса к сеансу. К ним обращались как n1через, n150когда они используются для хранения целочисленных значений, так и как v1через, v150когда используются для хранения значений с плавающей запятой.

Урок TUTOR может присоединить одну область общей памяти объемом до 1500 слов с помощью commonкоманды. У каждого урока может быть безымянный временный общий блок, содержащий переменные, общие для всех пользователей этого урока. Такие блоки создавались, когда урок использовался, и освобождались, когда урок становился неактивным. Напротив, именованные общие блоки были связаны с блоком урока (файлом на диске). К общей памяти обращались как nc1через nc1500(для целых чисел), так и vc1через vc1500(для чисел с плавающей запятой).

Если 150 переменных ученика было недостаточно, на уроке можно было использовать storageкоманду для создания дополнительного сегмента частной памяти до 1000 слов. Этот сегмент существовал только в пространстве подкачки, но его можно было сопоставить с переменными студента или общими переменными. Например (со страницы X-11 книги The TUTOR Language , Шервуд, 1974):

common  1000
storage 75
stoload vc1001,1,75

В этом примере nc1to определяется nc1000как общий безымянный общий блок, а nc1001to nc1075- это частное хранилище.

Определение символических имен

Команда Tutor defineочень похожа на директиву препроцессора C. Это был единственный способ связать мнемонические имена с переменными. Программист должен был статически выделять память и присваивать имена переменным. Рассмотрим этот пример со страницы 17 памятки для пользователя TUTOR - Введение в TUTOR , 1973 " #define

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

Это создает набор определений с именем, mynamesопределяющим три переменные с плавающей запятой. Пользователям советовали, что « в вашем уроке не должно быть никаких v3 или v26, кроме самого defineутверждения . Поместите все свои определения в самое начало урока, где у вас будет готовая ссылка на то, какие переменные вы используете». (подчеркивание из оригинала, страница IV-5 книги The TUTOR Language , Sherwood, 1974.)

Функции могут быть определены с семантикой макрозамены, как на этой иллюстрации со страницы IX-2 The TUTOR Language , Sherwood, 1974:

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

В отличие от C, исходные правила области действия TUTOR были чистым «определение перед использованием» без положений для локальных определений. Таким образом, формальный параметр, aиспользуемый выше, не должен иметь никакого предыдущего определения.

Позже при разработке TUTOR, с введением множества именованных наборов определений, программист получил явный контроль над тем, какие наборы определений действовали в настоящее время. Например, define purge, setnameотбросит все определения в названном наборе.

Массивы, упакованные массивы и манипуляции с текстом

Первоначальные инструменты TUTOR для манипулирования текстом основывались на командах для определенных текстовых операций, например, packдля помещения упакованной строки символов в последовательные переменные в памяти, searchдля поиска одной строки в другой и moveдля перемещения строки из памяти в память. К 1975 году были добавлены более общие инструменты для массивов целых чисел и упакованных массивов. Страница 14 памятки пользователя PLATO - Сводка команд и системных переменных TUTOR , Avner, 1975, дает следующее:

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

Сегментированные массивы , определенные с помощью ключевого слова segment, были сопоставимы с упакованными массивами в Паскале . Размер байта и то, должны ли элементы массива рассматриваться как подписанные или неподписанные, полностью находились под контролем пользователя. Произвольные манипуляции с текстом могут быть выполнены путем установки размера байта на размер машинного байта, 6 бит в реализациях с использованием кода дисплея , 8 бит в некоторых более поздних реализациях ASCII и расширенных реализациях ASCII . Обратите внимание на отсутствие какой-либо спецификации размерности массива для сегментированных массивов.

Передача параметров

Общий механизм передачи параметров был добавлен в TUTOR в начале эпохи PLATO IV. На странице IV-10 книги The TUTOR Language, написанной Шервудом, 1974 г., приводится следующий пример:

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

Обратите внимание, что формальные параметры, перечисленные в списке аргументов unitкоманды, представляют собой просто определенные имена для статически назначенных глобальных переменных. Семантика передачи параметров была дана как эквивалентная назначению во время передачи управления целевому устройству, и если фактические параметры были опущены, как во второй doкоманде выше, результатом было то, что предыдущие значения соответствующих формальных параметры без изменений.

Локальные переменные

Локальные переменные были добавлены в TUTOR примерно в 1980 году. Авторы уроков, желавшие использовать локальные переменные, должны были использовать lvarsкоманду для объявления размера буфера, используемого для локальных переменных, до 128 слов. После этого модуль, использующий локальные переменные, может начаться следующим образом (со страницы C2 Краткого обзора команд и системных переменных TUTOR , 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

Строки продолжения unitуказанной выше команды считаются строками неявной defineкоманды с локальной областью видимости . Обычные определения в терминах переменных ученика, которые n150могут быть использованы в такой локальной define, но все формы, проиллюстрированные здесь, автоматически связывают имена с местоположениями в блоке памяти, выделенном lvarsкомандой. В доступной документации TUTOR не обсуждается, как распределяются локальные переменные.

Другие реализации

Существует значительная семья языков, связанных с TUTOR, каждый из которых похож на исходный язык TUTOR, но с отличиями. В частности, TUTOR был компонентом системы (компьютерной образовательной системы PLATO), которая работала на определенном оборудовании мэйнфрейма CDC. Для эффективности в TUTOR были некоторые аппаратные элементы (например, переменные, которые были 60-битными словами, которые можно было использовать как массивы из 60 бит или как 10 шестибитных символов и т. Д.). Кроме того, TUTOR был разработан до появления ориентированного на окна графического интерфейса пользователя (GUI).

Язык microTutor был разработан в рамках проекта PLATO в UIUC, чтобы разрешить выполнение частей урока на терминалах, содержащих микрокомпьютеры, с подключениями к коду TUTOR, работающему на мэйнфрейме. Диалект microTutor был также языком программирования системы Cluster, разработанной в UIUC и лицензированной для TDK в Японии; Кластерная система состояла из небольшой группы терминалов, подключенных к мини-компьютеру, которые обеспечивали хранение и компиляцию. Система Tencore Language Authoring System - это производная программа TUTOR, разработанная Полом Тенцаром для ПК и продаваемая Computer Teaching Corporation. cT был производным от TUTOR и microTutor, разработанного в Carnegie Mellon, который позволял программам запускаться без изменений в оконных графических средах в системах Windows, Mac и Unix / Linux: Архивы языков программирования cT

Рекомендации

Внешние ссылки