WSFN (язык программирования)
WSFN ( что ничего не значит ) [1] — интерпретируемый язык программирования для управления роботами, созданный Ли-Чэнь Вангом . Он был спроектирован так, чтобы быть как можно меньшим, «крошечным» языком, [2] похож на более раннюю работу Ванга, Palo Alto Tiny BASIC . [3] [4] WSFN был впервые опубликован в журнале доктора Добба в сентябре 1977 года.
Язык состоит в основном из однобуквенных команд, которые сообщают роботу двигаться в определенных направлениях, в то время как другие команды выполняют тесты или основные математические операции. Их можно сгруппировать в именованные макросы для создания более сложных программ. Первоначальная версия также включала код, который имитировал робота в виде курсора на дисплее VDM-1 или графически на дисплее Cromemco Dazzler . Это похоже на графику черепахи , добавленную в язык программирования Logo в 1969 году.
Расширенный WSFN — это реализация, созданная для 8-битных компьютеров Atari, написанная Гарри Стюартом и опубликованная Atari Program Exchange. [5] в 1981 году. Помимо поддержки черепашьей графики, он добавляет ряд команд для управления графическими и звуковыми возможностями этой платформы. Он предлагался как «язык для начинающих с упором на графику ». [ нужна ссылка ]
Синтаксис
[ редактировать ]WSFN состоит из ряда однобуквенных команд для управления движением черепахи или робота. Любую из этих команд можно повторить, добавив к ней число. [2] Например, F
перемещает черепаху вперед на один шаг, при этом 25F
проходит 25 шагов. R
и L
заставить черепаху повернуть на одну единицу вправо или влево соответственно, а также ее можно сбросить на точку N
орт. Размеры шагов и единицы поворота определяются аппаратным обеспечением робота, но в версиях с графикой черепахи установлены на один пиксель и 45 градусов. Отсутствует в версиях для роботов, в компьютерных версиях. H
возвращает черепаху Домой в центр экрана и C
Очищает любой предыдущий рисунок. Таким образом, с помощью веревки можно нарисовать квадрат: [6]
BCWHN25F2R25F2R25F2R25F
Эти инструкции устанавливают черный цвет рисования, очищают экран (который заполняется текущим цветом), устанавливают белый цвет, возвращают черепаху в исходное положение, сбрасывают черепаху в точку на север, затем рисуют серию из четырех линий длиной 25 шагов, вращающихся 90 градусов вправо между каждой линией. В результате получается белый квадрат с левым нижним углом в центре экрана. [6]
Списки команд можно заключать в круглые скобки для создания макросов. Например, тот же квадрат можно нарисовать, поместив код рисования одной стороны квадрата в круглые скобки, а затем вызвав его четыре раза: [6]
BCWHN4(25F2R)
Макросы можно вызывать внутри других макросов. Например, этот код рисует серию из восьми квадратов, каждый из которых смещен на 45 градусов, вращаясь вокруг центра экрана: [6]
BCWHN8(4(25F2R)R)
Макросам можно присвоить имя с помощью D
Команда efine (используется расширенный WSFN) =
вместо). Этот код определяет макрос с именем «X» для очистки экрана и сброса рисунка, а также макрос «Z», который рисует квадрат. Затем он использует их для рисования того же вращающегося квадрата, что и в примере выше: [7]
DX(BCWHN) DZ4(25F2R) X8(ZR)
WSFN имеет элементарные математические возможности, состоящие из одного аккумулятора. A
которые можно увеличивать и уменьшать с помощью +
и -
. Письмо A
можно разместить в любом месте, где может появиться число. Можно увеличить серию квадратов, увеличивая аккумулятор 5 раз между каждым шагом: [2]
DX(BCWHN) 25A DZ4(AF2R) X8(Z5+AR)
Побочным эффектом синтаксиса является то, что A-
установит аккумулятор в ноль, поскольку он выполняет инструкцию уменьшения на число в A. Аналогично, A+
удваивает значение в аккумуляторе. [2]
Программное управление также элементарно и состоит из ряда команд, обрабатывающих структуры IF/THEN/ELSE . Самая основная форма – это T
est, которая следует по одному из двух путей, если аккумулятор больше или равен нулю. Например, эта команда заставляет черепаху поворачиваться на 90 градусов влево, если аккумулятор не равен нулю, или на 45 градусов вправо, если он равен нулю: [2]
T(2L)R
Вариации на тему T
ветвящаяся конструкция включает в себя ?
, который случайным образом переходит к первой или второй ветке в 50% случаев, и S
датчик, который проверяет, сработал ли контактный датчик на роботе. [8] Расширенный WSFN изменил S
чтобы вернуть цвет перед черепахой, позволяя обнаруживать попадания на предыдущем рисунке, и добавил E
dge тест, который переходит к макросу с правой стороны, если черепаха ударяется о край области рисования. [9] В оригинальном WSFN отсутствует эквивалент E
, и вместо этого оборачивает область рисования, чтобы черепаха снова появилась на противоположной стороне экрана. [2] Расширенный WSFN поддерживает этот стиль переноса игрового поля в качестве опции. [10]
Поскольку код WSFN использует однобуквенные команды и рекурсивный синтаксис, он чрезвычайно загадочен. Например, это программа WSFN для рисования кривых Серпинского : [11]
DIT(-I2FI5RG5RI2FI+)2R DG4F DY (HN63F2R61FRC4 (2FI))
Обратите внимание, что определение макроса «I» включает в себя вызовы I внутри него. Это ключевой аспект концепции WSFN; язык является высокорекурсивным по своей природе, что позволяет легко реализовать программирование самоподобных шаблонов, таких как фракталы, с помощью нескольких строк кода. [11]
Ключевая концепция Extended WSFN заключается в том, что клавиатура всегда активна, даже во время выполнения макросов. Это позволяет вводу с клавиатуры прерывать работающие программы. Используя этот прием, можно составить макросы для перемещения черепахи определенными способами, назначить их буквам на клавиатуре, а затем выполнять эти движения, последовательно нажимая разные клавиши. Этому можно помочь, добавив W
Команда ait местами дает пользователю время отреагировать на процесс рисования. [12]
Ключевые слова
[ редактировать ]Из оригинальной статьи доктора Доббса . [13]
Ключевое слово | Описание |
---|---|
А | Цикл по значению аккумулятора (A- устанавливает его в ноль, A+ удваивает его) |
Б | Установите цвет рисунка на черный |
С | Очистить экран (заполнить текущим цветом) |
Д | Определить макрос |
Ф | Переместить черепаху вперед |
ЧАС | Верните черепаху в исходное положение |
л | Поверните черепаху влево |
Н | Направьте черепаху на север (вверх). |
Р | Поверните черепаху вправо |
С | Проверка контактного датчика на роботе (IF/THEN/ELSE) |
Т | Проверка ненулевого аккумулятора (IF/THEN/ELSE) |
В | Установите цвет рисунка на белый |
= | Определите имя макроса |
? | Случайный тест, как T, но следует за каждой ветвью в 50% случаев. |
+ | Аккумулятор приращения |
- | Декрементный аккумулятор |
Из руководства по расширенному WSFN. [14]
Ключевое слово | Описание |
---|---|
Б | Звуковой сигнал |
Д | Перо вниз |
И | Проверяет, находится ли черепаха на краю экрана. |
П | Установите цвет пера в соответствии со значением в аккумуляторе. |
С | Установите аккумулятор на цвет перед черепахой (Sense, как в оригинальной версии) |
В | Перо вверх |
В | Подожди один миг( 1/30 секунды ) |
= | Определить макрос |
=# | Определить переменную |
# | Цикл по значению переменной |
* | Добавление * к командам направления *L или *R изменило угол до 22,5 градусов вместо 45. |
$ | Проверка джойстика против выбранного направления (IF/THEN/ELSE) |
% | Считайте значение лопастного контроллера в аккумулятор. |
& | Записать значение в аккумулятор в выбранный регистр цвета. |
; | Считайте направление черепахи от 0 до 7 в аккумулятор. |
@ | Установите аккумулятор на ноль (так же, как A- в WSFN) |
Ссылки
[ редактировать ]- ^ Синяя книга для компьютера Atari . Видео ВИДЛ. 1983. ISBN 9780684179216 .
- ^ Перейти обратно: а б с д и ж Деньги 1977 , с. 334.
- ^ Ван, Ли-Чен (май 1976 г.). «Пало-Альто Крошечный БЕЙСИК». Журнал доктора Добба . 1 (5): 12–25.
- ^ Рауколб, Роберт (декабрь 1976 г.). «Крошечный БЕЙСИК Пало-Альто доктора Вана» (PDF) . Возраст интерфейса . стр. 92–108.
- ^ Листинг APX на сайте atariarchives.org.
- ^ Перейти обратно: а б с д Стюарт 1982 , с. 4.
- ^ Деньги 1977 , с. 345.
- ^ Деньги 1977 , с. 334 335.
- ^ Стюарт 1982 , с. 10.
- ^ Стюарт 1982 , с. 3.
- ^ Перейти обратно: а б Деньги 1977 , с. 336.
- ^ Стюарт 1982 , с. 5.
- ^ Ван 1977 .
- ^ Стюарт 1982 .
Библиография
[ редактировать ]- Ван, Ли-Чен (сентябрь 1977 г.). «Интерактивный язык программирования для управления роботами» . Журнал доктора Добба . Том. 2, нет. 8. С. 334–345.
- Стюарт, Гарри (1982). Расширенный WSFN (PDF) . АПХ.