WikiDer > WSFN (язык программирования) - Википедия
WSFN (Что ничего не значит)[1] является интерпретированный язык программирования для контроля роботы сделано Ли-Чен Ван. Он был разработан как можно более компактным, «крошечным» языком,[2] аналогично ранним усилиям Ванга, Palo Alto Tiny BASIC.[3][4] WSFN был впервые опубликован в Журнал доктора Добба в сентябре 1977 г.
Язык состоит в основном из однобуквенных команд, указывающих роботу двигаться в определенном направлении, в то время как другие команды выполняют тесты или базовые математические операции. Их можно сгруппировать в названные макросы для создания более сложных программ. Исходная версия также включала код, моделирующий робота в виде курсора на ВДМ-1 дисплей или графически на Cromemco Dazzler отображать. Это похоже на черепаха графика добавлен в Логотип язык программирования 1969 г.
Расширенный WSFN это реализация, созданная для Семейство 8-битных Atari из домашние компьютеры написана Гарри Стюартом и опубликована Обмен программами Atari[5] в 1981 году. В дополнение к поддержке графики черепахи он добавляет ряд команд для управления графическими и звуковыми возможностями этой платформы. Он предлагался как "язык для начинающих с упором на графика".[нужна цитата]
Синтаксис
WSFN состоит из ряда однобуквенных команд для управления движением черепаха или робот. Любую из этих команд можно повторить, поставив перед ней номер.[2] Например, F
перемещает черепаху на один шаг вперед, а 25F
перемещает 25 шагов. р
и L
заставьте черепаху повернуться на одну единицу вправо или влево соответственно, и ее также можно сбросить на точку N
Орт. Размеры шага и единицы поворота определяются аппаратным обеспечением робота, но в версиях с графикой черепахи они установлены на один пиксель и 45 градусов. Отсутствует в версиях роботов, в версиях для компьютеров. ЧАС
возвращает черепаху на главную в центре экрана и 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 имеет элементарные математические возможности, состоящие из одного аккумулятор А
которые можно увеличивать и уменьшать с помощью +
и -
. Письмо А
можно разместить в любом месте, где может появиться число. Можно увеличить последовательность квадратов, увеличивая аккумулятор в 5 раз между каждым шагом:[2]
DX (BCWHN) 25ADZ4 (AF2R) X8 (Z5 + AR)
Побочным эффектом синтаксиса является то, что А-
установил бы аккумулятор в ноль, потому что он выполняет инструкцию уменьшения на число в A. Аналогично, А +
удваивает значение в аккумуляторе.[2]
Управление программой столь же рудиментарно и состоит из ряда команд, которые обрабатывают ЕСЛИ / ТО / ИНАЧЕ конструкции. Самая основная форма - это Т
Команда est, которая следует по одному из двух путей, если аккумулятор был больше или равен нулю. Например, эта команда заставляет черепаху повернуться на 90 градусов влево, если аккумулятор не равен нулю, или на 45 вправо, если он равен нулю:[2]
Т (2Л) П
Вариации на тему Т
разветвленная конструкция включает ?
, который случайным образом переходит к первой или второй ветви в 50% случаев, и S
Ensor, который проверяет, сработал ли контактный датчик на роботе.[8] Расширенный WSFN изменил S
чтобы вернуть цвет перед черепахой, что позволяет обнаруживать попадание на предыдущем рисунке, и добавил E
dge test, который переходит к макросу правой стороны, если черепаха попадает в край области рисования.[9] В оригинальном WSFN нет эквивалента E
, а вместо этого оборачивает область рисования, чтобы черепаха снова появлялась на противоположной стороне экрана.[2] Расширенный WSFN поддерживает этот стиль упаковки игрового поля в качестве опции.[10]
Поскольку он использует однобуквенные команды и рекурсивный синтаксис, код WSFN является чрезвычайно загадочным. Например, это программа WSFN для рисования Кривые Серпинского:[11]
DIT (-I2FI5RG5RI2FI +) 2RDG4FDY (HN63F2R61FRC4 (2FI))
Обратите внимание, что определение макроса «I» включает в себя вызовы I. Это ключевой аспект концепции WSFN; язык очень рекурсивный в природе, что делает программирование самоподобных шаблонов как фракталы легко выполнить с помощью нескольких строк кода.[11]
Ключевой концепцией расширенного WSFN является то, что клавиатура всегда активна, даже когда выполняются макросы. Это позволяет вводить с клавиатуры прерывание запущенных программ. Используя эту технику, можно создавать макросы для перемещения черепахи определенными способами, назначать их буквам на клавиатуре, а затем выполнять эти движения, нажимая разные клавиши по очереди. Этому можно помочь, добавив W
ait местами, чтобы дать пользователю время отреагировать в процессе рисования.[12]
Ключевые слова
Из оригинала Доктор Доббс статья.[13]
Ключевое слово | Описание |
---|---|
А | Цикл по значению аккумулятора (A- устанавливает его в ноль, A + удваивает его) |
B | Установите черный цвет рисунка |
C | Очистить экран (заполнить текущим цветом) |
D | Определить макрос |
F | Переместите черепаху вперед |
ЧАС | Верните черепаху в исходное положение |
L | Поверните черепаху влево |
N | Направьте черепаху на север (вверх) |
р | Поверните черепаху вправо |
S | Проверить датчик контакта на роботе (ЕСЛИ / ТО / ИНАЧЕ) |
Т | Тест на ненулевой аккумулятор (IF / THEN / ELSE) |
W | Установите белый цвет рисунка |
= | Определите имя макроса |
? | Случайный тест, как и T, но следует за каждой веткой в 50% случаев. |
+ | Аккумулятор приращения |
- | Аккумулятор декремента |
Из руководства по расширенному WSFN.[14]
Ключевое слово | Описание |
---|---|
B | Звуковой сигнал |
D | Ручка вниз |
E | Проверяет, находится ли черепаха у края экрана |
п | Установите цвет пера на значение в аккумуляторе |
S | Установите аккумулятор на цвет перед черепахой (Sense, как в оригинальной версии) |
U | Ручка вверх |
W | Подождите минуту (1⁄30 секунды) |
= | Определить макрос |
=# | Определить переменную |
# | Циклы по значению в переменной |
* | Добавление * к командам направления, * L или * R изменило угол на 22,5 градуса вместо 45. |
$ | Проверить джойстик против выбранного направления (IF / THEN / ELSE) |
% | Считайте значение лопастного контроллера в аккумулятор |
& | Записать значение аккумулятора в выбранный регистр цвета |
; | Считайте направление черепахи от 0 до 7 в аккумулятор. |
@ | Установите аккумулятор в ноль (как A- в WSFN) |
Рекомендации
- ^ Синяя книга для компьютера Atari. WIDL Video. 1983 г.
- ^ а б c d е ж Ван 1977, п. 334.
- ^ Ван, Ли-Чен (Май 1976 г.). "Пало-Альто Крошечный БЕЙСИК". Журнал доктора Добба. 1 (5): 12–25.
- ^ Раусколб, Роберт (декабрь 1976 г.). "Крошечный БЕЙСИК Пало-Альто доктора Вана" (PDF). Возраст интерфейса. С. 92–108.
- ^ Размещение APX на сайте atariarchives.org
- ^ а б c d Стюарт 1982, п. 4.
- ^ Ван 1977, п. 345.
- ^ Ван 1977, п. 334,335.
- ^ Стюарт 1982, п. 10.
- ^ Стюарт 1982, п. 3.
- ^ а б Ван 1977, п. 336.
- ^ Стюарт 1982, п. 5.
- ^ Ван 1977.
- ^ Стюарт 1982.
Библиография
- Ван, Ли-Чен (Сентябрь 1977 г.). «Интерактивный язык программирования для управления роботами». Журнал доктора Добба. Vol. 2 шт. 8. С. 334–345.CS1 maint: ref = harv (связь)
- Стюарт, Гарри (1982). Расширенный WSFN (PDF). APX.CS1 maint: ref = harv (связь)