SNAP (язык программирования) - SNAP (programming language)
Парадигма | Императив |
---|---|
Разработано | Майкл Барнетт, Уильям Рухсам |
Впервые появился | 1970 |
ЩЕЛЧОК, Короче для Стилизованный, Натуральный, Процедурный, является образовательный язык программирования разработано Майкл Барнетт во время работы в RCA в 1968 году и позже использовался в Колумбийский университет научить программированию в гуманитарные науки. Это императивный язык программирования, как и многие языки 1960-х годов, но был намеренно многословным, пытаясь больше походить на разговорный английский в моде Гипертекст и более поздние языки. В отличие от других образовательных языков той эпохи, протокол SNAP не предназначался для интерактивного использования и был разработан для программирования через перфокарты. Для экономии карточек на каждой карточке можно было написать несколько операторов, разделенных точками, поэтому результирующий код часто выглядел как один абзац.
История
В 1964 г. Майкл Барнетт присоединился RCA недавно созданное подразделение Graphic Systems Division, которое было создано для коммерциализации фото-наборный технология, на которую они получили лицензию Рудольф Ад. Первоначально известная как Digiset, RCA продавала системы под названием Videocomp. За свою историю было продано около 50 систем Videocomp.[1]
В 1964 и 1965 годах Барнетт разработал язык описания страницы известный как PAGE-1 для написания программ, которые приводили к выходу Videocomp, аналогично тому, как PostScript язык создает страницы на лазерные принтеры.[2] Одним из первых применений этой системы было опубликование Индекс социальных наук посредством Компания H. W. Wilson.[3]
Это привело к интересу Барнетта к социальные науки и его растущее взаимодействие с Х. У. Уилсоном и Колумбийский университет гуманитарный факультет. Барнетт занял должность в H. W. Wilson в 1969 году. Он также начал преподавать курсы по автоматизации библиотек в Колумбийской школе библиотечного обслуживания, а в 1970 году - по компьютерному программированию в гуманитарных науках.[4] В 1975 году он поступил на постоянный факультет Колумбийского университета.
Первую версию SNAP написал Уильям Рухсам из RCA в FORTRAN IV[5] для RCA Spectra 70, хотя версия для IBM 360 в ОС-360 также был произведен.[а] где-то в 1967 или 1968 году.[6][b] Этот язык вызвал изрядное количество комментариев, особенно в начале 1970-х годов.[7] но, похоже, не оказал прямого влияния на более поздние языки.
Описание
Общие понятия
SNAP позволял размещать несколько операторов в одной строке и использовал точку в качестве разделителя операторов. Это произвело код, который выглядел как английские предложения и обычно был организован в блоки, похожие на абзацы.[8]
SNAP не использовал номера строк для редактирования, а вместо этого использовал метки в коде для целей ветвления, как это было в случае FORTRAN. В SNAP метку можно разместить в любом месте кода, заключив текстовое имя в круглые скобки, например (ПЕРВАЯ ЭТИКЕТКА)
. Этикетки не являются отдельными заявлениями и не требуют точки после них.[9]
Имена переменных могут содержать пробелы, что относительно редко встречается в языках программирования даже сегодня. Переменные могут содержать строки или числа, но для каждого из них использовался другой синтаксис. Для чисел использовался простой синтаксис, УСТАНОВИТЕ I НА 1.
НАБОР
также использовался для выполнения математических операций, таких как НАБОР I ДЛЯ ПРОДУКТОВ 10 И J.
Был предложен более простой синтаксис для более распространенных операций увеличения и уменьшения, УВЕЛИЧИТЬ M НА 1.
или же УМЕНЬШИТЬ M НА 2.
[9]
Для строк обычно использовался более длинный синтаксис, ПОЗВОНИТЕ "ЭТО СТРУНКА" НОВОСТИ.
Доступ к подстрокам осуществлялся с использованием синтаксиса, подобного HyperTalk, путем ссылки на порядковый номер, например, ПОЗВОНИТЕ J-ТОМУ ПЕРСОНАЖУ НОВОСТИ В NEWCHAR.
, или же ВЫЗЫВАЙТЕ M-TH ЧЕРЕЗ N-Й ХАРАКТЕРЫ ВХОДА ВЫХОДА.
[9]
SNAP также предлагал коллекции в виде массивов, известные как «списки». Внутри они хранились в виде строк, разделенных запятыми. Для работы с ними можно использовать большинство команд, связанных со строками, добавив СПИСОК.
к концу. Например, можно было прочитать серию карточек, используя ПРОЧИТАЙТЕ СПИСОК КАРТ.
, который считывал бы каждую карту как отдельную строку в переменной CARD. Доступ к элементам в списке осуществлялся с использованием того же порядкового синтаксиса, например ПЕЧАТЬ 5-Й КАРТОЧКИ
, или же КОПИРУЙТЕ «НОВУЮ СТРОКУ» И НАЗЫВАЙТЕ ЕЕ 7-ю КАРТУ.
Списки номеров могут быть созданы с помощью УСТАНОВИТЕ НОМЕРНЫЙ СПИСОК 1,2,3,4,5.
[10]
Строковые переменные также могут использоваться как списки или массивы. Это было выполнено с использованием того же синтаксиса порядкового номера, но со ссылкой на имя переменной, а не на ПЕРСОНАЖ
. Например, ЗВОНИТЕ "ПРИВЕТ" 1-Я ЧАСТЬ. ЗВОНИТЕ "МИР" 2-Я ЧАСТЬ.
создаст массив с именем PART с двумя строками в нем.[9]
Важным моментом системы SNAP является то, что ВЫЗОВ
заявление не статично; он не определяет KEY как символ в местоположении J, когда он встречается в коде, но когда любой следующий код обращается к KEY. Например, УСТАНОВИТЕ J НА 1. ПЕЧАТЬ КЛЮЧ. УВЕЛИЧИТЬ J НА 1. ПЕЧАТЬ КЛЮЧ.
приведет к печати двух разных строк. Таким образом ВЫЗОВ
имеет больше общего с BASIC язык программирования с DEF FN
определяемые пользователем функции чем это происходит с НАБОР
заявление, которое является статическим.[11]
Статическая копия строки может быть сделана КОПИРУЙТЕ СТАРУЮ СТРОКУ И НАЗЫВАЙТЕ ЕГО НОВОСТЬ
Включены другие строковые функции ДОБАВИТЬ одна строка К другая строка.
, ПЕРЕЗАПИСАТЬ строковое выражение НА ПЕРСОНАЖЕ [И ПОСЛЕДУЮЩИХ] ХАРАКТЕРАХ [S] строка-имя.
, УДАЛИТЬ ПЕРСОНАЛЬНЫЙ [ЧЕРЕЗ N-TH] ХАРАКТЕР [S] ИЗ строка-имя.
и ВСТАВЛЯТЬ строковое выражение (ДО | ПОСЛЕ) М-го ХАРАКТЕРА строка-имя.
[12]
Безусловные ветки были вызваны с использованием ПРОДОЛЖИТЬ
, например, ПРОДОЛЖИТЬ С ПЕРВОЙ ЭТИКЕТКИ.
Также была альтернативная форма ПОВТОРИТЕ ПЕРВУЮ ЭТИКЕТКУ.
. Между ними не было разницы, хотя контекст окружающего кода обычно означал, что та или иная форма более естественна для чтения. Можно также обозначить начало программы с помощью ПРОДОЛЖАЙТЕ С НАЧАЛА.
«Как следует» можно использовать для обозначения следующего утверждения, ПРОДОЛЖИТЬ КАК СЛЕДУЮЩЕЕ.
, который можно использовать для уточнения ветвей.[13]
Условные переходы использовали if – then (–else) структура:
ЕСЛИ J МЕНЬШЕ 80 УВЕЛИЧИВАЙТЕ J НА 1 И ПОВТОРИТЕ С ПЕРВОЙ ЭТИКЕТКИ, В противном случае продолжайте, как показано ниже.
Как и в большинстве языков, ИНАЧЕ
раздел был необязательным. Обратите внимание на использование И
чтобы сделать составной оператор в разделе then, предлагая блочную структуру. Для сравнения строк использовался ЯВЛЯЕТСЯ
или необязательный ТАКОЙ ЖЕ КАК
.[12]
SNAP включал ряд других ключевых слов, которые не имели собственного поведения, которые были добавлены просто для синтаксический сахар. Среди них были THE
, А
, ИЗ
которые программист мог добавить во многих местах, чтобы сделать синтаксис более читабельным. Включены типичные применения ПРОЧИТАЙТЕ ЗАПИСЬ
и ПОВТОР С НАЧАЛА ПЕТЛИ
.[13]
Заявления
Из Естественный язык.[6] Переменные и выражения находятся в курсив. Необязательные формы разделены вертикальными полосами, |. Скобки окружают необязательные элементы, а угловые скобки - обязательные элементы, которые имеют более одной формы. ценить относится к числовой константе или переменной, нить в строковую константу или строковую переменную, разделенную кавычками.
Управление потоком:
(строковая константа)
- определяет метку программы
<ПРОДОЛЖИТЬ | ПОВТОРИТЬ> [С | ОТ] <метка| НАЧАЛО [ПРОЦЕДУРЫ] | СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ | ПОСЛЕДУЮЩЕЕ>
- перейти к названной метке, началу программы или перейти к следующему оператору
ЕСЛИ значение | строка <ЕСТЬ | ЕСТЬ> [ТАК ЖЕ КАК] значение | строка выражение[,И выражение...] [, ИНАЧЕ выражение[,И выражение...]]
- конструкция if-then-else с любым количеством выражений в разделах then и else
- -строки сравнения разрешили тесты подстроки, такие как
ЭТО ценить[-Й] И [ПОСЛЕДУЮЩИЕ | ПРЕДЫДУЩИЕ] ПЕРСОНАЖИ нить
- -числовые сравнения включены
РАВНО
,МЕНЬШЕ, ЧЕМ
,ЛУЧШЕ ЧЕМ
,НЕ РАВНО
,БОЛЬШЕ ИЛИ РАВНО
,МЕНЬШЕ ИЛИ РАВНО
- -Конец файла можно проверить с помощью
ЕСЛИ ВХОД ИЗЛОЖЕН
.
- -строки сравнения разрешили тесты подстроки, такие как
- конструкция if-then-else с любым количеством выражений в разделах then и else
ПРЕКРАТИТЬ
- останавливает программу
ВЫПОЛНЯТЬ
- запускает программу. Должен был быть расширен, чтобы позволить запускать выполнение с данной метки, но не был реализован в версиях, описанных в справочных материалах.
Математика:
НАБОР числовая переменная К ценить
- присваивает значение числовой переменнойНАБОР числовая переменная К [СУММА | РАЗНИЦА | ПРОДУКТ | ЧИСЛО | ОСТАЛОСЬ | ПОТОЛОК | БОЛЬШЕ | МЕНЬШЕ] ценить И ценить
- выполнять математические функции с двумя операндами
УВЕЛИЧИВАТЬ Переменная К ценить
- упрощенные обозначения для сложенияСНИЖАТЬСЯ Переменная К ценить
- ... и вычитание
Строковые манипуляции:
ВЫЗОВ нить [THE] строковая переменная
- создать строковую функцию[ФОРМА A] КОПИЯ [OF] нить И НАЗВАТЬ ЕГО [THE] строковая переменная
- копировать строку из одной переменной в другуюДОБАВИТЬ нить К строковая переменная
- добавить строковую переменную к другой строкеСВЯЗЬ нить К нить
- добавляет первую строку ко второй, но не копирует ее, будущие изменения второй строки будут отслеживаться как вВЫЗОВ
УДАЛИТЬ ценить[-TH] [ЧЕРЕЗ ценить [-TH]] ХАРАКТЕР [S] OF строковая переменная
- обрезать строку от выбранного символа или заданного диапазонаПЕРЕЗАПИСАТЬ нить НА ценить[-TH] [И ПОСЛЕДУЮЩИЕ | ПРЕДЫДУЩИЙ] ХАРАКТЕР [S] OF строковая переменная
- заменяет один символ строки другим, или этот символ и символы, идущие вперед или назад от выбранной позиции.
Связанные с вводом / выводом:
ВЫБРАТЬ номер [ДЛЯ <ВХОД | ВЫХОД>]
- используется для выбора устройства для других ввод, вывод операции
ПРОЧИТАЙТЕ [A | THE] строковая переменная
- читает сингл перфокарты
ЗАПРОС [A | THE] строковая переменная
- запрашивает ввод пользователя с консоли
ПОЛУЧИТЬ [A | THE] строковая переменная
- читает одну запись из самой последней
ВЫБРАТЬ
устройство ed
- читает одну запись из самой последней
ПЕЧАТЬ [A | THE] Переменная
- отправляет вывод в линейный принтер
ТИП [A | THE] Переменная
- отправляет вывод на консоль
УДАР [A | THE] Переменная
- отправляет вывод на перфорацию карты
ПЕРФОРАТ [A | THE] Переменная
- отправляет вывод в бумажная лента
НАПИШИТЕ [A | THE] Переменная
- отправляет данные последнему
ВЫБРАТЬ
устройство ed
- отправляет данные последнему
Другие:
КОНТРОЛЬ разные
- временная команда, используемая для управления языком по мере добавления новых функций
ЗАБРОНИРОВАТЬ МЕСТО ДЛЯ номер <ПЕРСОНАЖИ В Переменная| ЭЛЕМЕНТЫ В [THE] Переменная СПИСОК
- аналогично
Тусклый
Оператор BASIC выделяет указанный объем памяти для хранения строки или заданное количество строк из списка. С помощьюБРОНИРОВАТЬ
избежание операций с памятью при построении строки или списка и повышение производительности
- аналогично
Пример
Вот самый крупный пример практической программы, представленной в ЩЕЛЧОК,[14] который считывает строки с карточек, а затем распечатывает отдельные слова, найденные в них:
ПРОЧИТАЙТЕ ЗАПИСЬ. УСТАНОВИТЕ I в 1. УСТАНОВИТЕ J в 1. ВЫЗОВ J-ТОМУ СИМВОЛА ЗАПИСИ КЛЮЧОМ. (НАЧАЛО ЦИКЛА) ЕСЛИ КЛЮЧ "" ПРОДОЛЖИТЬ РЕЗЕРВНОЕ КОПИРОВАНИЕ. ЕСЛИ КЛЮЧ "" ПРОДОЛЖАЙТЕ РЕЗЕРВНОЕ КОПИРОВАНИЕ. ЕСЛИ КЛЮЧ "." ПРОДОЛЖИТЬ РЕЗЕРВНОЕ КОПИРОВАНИЕ. ЕСЛИ J МЕНЬШЕ 80, УВЕЛИЧИВАЙТЕ J НА 1 И ПОВТОРИТЕ С ЗАПУСКА ПЕТЛИ, В противном случае ПРОДОЛЖАЙТЕ ВЫХОДНОЕ ДЕЙСТВИЕ. (РЕЗЕРВНОЕ КОПИРОВАНИЕ) УМЕНЬШИТЬ J НА 1. (ВЫХОДНОЕ ДЕЙСТВИЕ) ПЕЧАТЬ ПЕРВОГО J-ЧЕГО ХАРАКТЕРА ЗАПИСИ. ЕСЛИ J МЕНЬШЕ 79 УВЕЛИЧИВАЙТЕ J НА 2, SETI ДО J И ПОВТОРИТЕ С НАЧАЛА ЦИКЛА, В противном случае ПОВТОРИТЕ С НАЧАЛА.
Для ясности следующая версия просто разбивает операторы на отдельные строки и добавляет соответствующие пробелы:
ПРОЧИТАЙТЕ ЗАПИСЬ. УСТАНОВИТЕ I в 1. УСТАНОВИТЕ J в 1. ВЫЗОВИТЕ J-ТЫЙ ХАРАКТЕР ЗАПИСИ КЛЮЧ. (НАЧАЛО ПЕТЛИ) ЕСЛИ КЛЮЧ «» ПРОДОЛЖИТЕ РЕЗЕРВНОЕ КОПИРОВАНИЕ. ЕСЛИ КЛЮЧ - "" ПРОДОЛЖАЙТЕ РЕЗЕРВНОЕ КОПИРОВАНИЕ. ЕСЛИ КЛЮЧ "." ПРОДОЛЖИТЬ РЕЗЕРВНОЕ КОПИРОВАНИЕ. ЕСЛИ J МЕНЬШЕ 80, УВЕЛИЧИВАЙТЕ J НА 1 И ПОВТОРИТЕ С ЗАПУСКА ЦИКЛА, В противном случае ПРОДОЛЖАЙТЕ ВЫХОДНОЕ ДЕЙСТВИЕ. (РЕЗЕРВНОЕ КОПИРОВАНИЕ) УМЕНЬШИТЕ J НА 1. (ВЫХОДНОЕ ДЕЙСТВИЕ) ПЕЧАТЬ С I-TH ПО J-TH ХАРАКТЕРИСТИКИ ЗАПИСИ . ЕСЛИ J МЕНЬШЕ 79 УВЕЛИЧИВАЙТЕ J НА 2, УСТАНОВИТЕ I ДО J И ПОВТОРИТЕ С НАЧАЛА ЦИКЛА, В противном случае ПОВТОРИТЕ С НАЧАЛА.
Программа ЧИТАТЬ
s одной карты и назначает найденные на ней строковые данные переменной с именем RECORD. Затем он устанавливает два указателя, I и J. Функция KEY ВЫЗОВ
ed, который возвращает J-й символ ЗАПИСИ.
Затем он проверяет J-й символ, чтобы определить, является ли он символом разбиения на слова или находится за концом строки. Если любой из них верен, он переходит в РЕЗЕРВНОЕ КОПИРОВАНИЕ, которое создает резервную копию одного символа (чтобы пропустить только что проверенную пунктуацию), а затем распечатывает строку из начальной позиции в I до текущей позиции в J. Я не видел разрыв слова, попробуйте следующий символ, если он еще остался, в противном случае отобразите то, что мы уже нашли.
Если мы не дошли до конца карточки, переместите J вперед на два символа, чтобы пропустить знаки препинания, которых мы ранее избегали, что переместит указатель в начало следующего (потенциального) слова. Затем установите I в J, чтобы расположить начальную позицию нашего следующего слова с этой точки, и вернитесь в LOOP START. Если мы находимся в конце карточки, запустите всю программу заново и прочитайте другую карточку.
Примечания
Рекомендации
Цитаты
- ^ Белзер, Джек; Хольцман, Альберт; Кент, Аллен, ред. (Декабрь 1976 г.). «Компьютеризированная композиция». Энциклопедия информатики и технологий. CRC Press. п. 350. ISBN 9780824722555.
- ^ Пирсон, Джон (1972). Компьютерная композиция с использованием PAGE-1. Wiley Interscience. п. vi. ISBN 9780471689553.
- ^ «Некролог Майкла Барнетта (1929-2012)». Физика сегодня. 29 марта 2012 г. Дои:10.1063 / PT.4.1776.
- ^ Барнетт, Майкл (1971). «Компьютерное оборудование и программное обеспечение для библиотекарей». In Fasana, P.J .; Veaner, A. (ред.). Совместная разработка библиотечных систем. MIT Press.
- ^ Barnett & Ruhsam 1968 г., п. 47.
- ^ а б c Barnett & Ruhsam 1968 г., п. 48.
- ^ Раскин, Джеффри (Январь 1971 г.). «Языки программирования для гуманитарных наук». Компьютеры и гуманитарные науки. 5 (3): 155–158. Дои:10.1007 / BF02402180. S2CID 61028443.
- ^ Барнетт 1970, п. 225.
- ^ а б c d Барнетт 1970, п. 228.
- ^ Barnett & Ruhsam 1968 г., п. 49.
- ^ Барнетт 1970, п. 231.
- ^ а б Барнетт 1970, п. 232.
- ^ а б Барнетт 1970, п. 230.
- ^ Барнетт 1970, п. 229.
Библиография
- Барнетт, Майкл; Рухсам, Уильям (май 1969 г.). Харрисон Фуллер (ред.). SNAP: эксперимент в программировании на естественном языке. AFIPS '69, Весенняя совместная конференция. Бостон. С. 75–87. Дои:10.1145/1476793.1476815.CS1 maint: ref = harv (связь)
- Барнетт, Майкл; Рухсам, Уильям (август 1968 г.). «Система программирования на естественном языке для обработки текста». IEEE Transactions по инженерному письму и речи. 11 (2): 45–52. Дои:10.1109 / TEWS.1968.4322334. JSTOR 30199362. S2CID 51670564.CS1 maint: ref = harv (связь)
- Барнетт, Майкл (март 1970). «SNAP: язык программирования для гуманистов». Компьютеры и гуманитарные науки. 4 (4): 225–240. Дои:10.1109 / TEWS.1968.4322334. JSTOR 30199362. S2CID 51670564.CS1 maint: ref = harv (связь)
дальнейшее чтение
- Барнетт, Майкл (1969). Компьютерное программирование на английском языке. Harcourt, Brace & World. ПР 5754250M.