Меню
Главная
Случайная статья
Настройки
|
Фокал (Focal, акроним от англ. formula calculator) — интерпретируемый язык программирования высокого уровня, переработка языка JOSS.
Наибольший вклад в разработку языка внёс Ричард Мерилл (англ. Richard Merrill), один из ключевых разработчиков DEC PDP-8, создавший изначальный (в 1968 году) и классический (FOCAL-69) интерпретаторы Фокала для PDP-8. Компания DEC позиционировала Фокал как «язык типа JOSS».
Как и ранние версии Бейсика (который появился через 7 лет), интерпретатор Фокала сам обеспечивал всё необходимое программное окружение и не нуждался в операционной системе.
Фокал крайне нетребователен к ресурсам. Так, он работал на самых простых вариантах PDP-8, в том числе на системах без устройств хранения. Многопользовательские варианты интерпретатора поддерживали одновременную работу до четырёх пользователей на телетайпных терминалах. Позднее были созданы реализации для PDP-7/9 и PDP-11.
Компания Coca-Cola использовала внутри фирмы доработанную версию Фокала под названием COKE.
Из советских компьютеров Фокал существовал на Электронике БК-0010/0011 и ДВК встроенный в ПЗУ (в поздних моделях БК — доступный на картридже). Имелись также доступны расширения Фокала для этих машин, написанные различными энтузиастами. Расширения содержали разнообразные дополнительные команды и функции для работы с графикой, звуком, запуска двоичных программ, обработки строк и ряд других.
Существенно расширенная версия языка использовалась в качестве включающего языка в ДИАСП — Диалоговой системе проектирования — специализированной САПР, предназначенной для целей микроэлектроники.
В 1990-е годы энтузиастами была предпринята попытка переноса Фокала на IBM PC (Turbo Focal), но она не вышла из стадии бета-версии, распространявшейся по каналам BBS.
Работоспособность публично доступной в исходных текстах версии Focal-81 была успешно протестирована на следующих платформах и компиляторах:
Из-за схожести синтаксиса Фокал часто сравнивался с Бейсиком. В целом язык уступает Бейсику по своим выразительным возможностям — так, в Фокале совершенно отсутствует строковый тип данных; все переменные на Фокале — числовые (как правило, дробные числа с плавающей запятой). Вместе с тем интерпретатор Фокала гораздо менее требователен к ресурсам (прежде всего к памяти), нежели Бейсик, что позволяло писать более сложные программы в системах с ограниченными ресурсами.
С конца 1980-х годов Фокал не развивается и практически не используется, вышеупомянутые порты Focal-81 были сделаны энтузиастами для развлечения.
Содержание
Некоторые команды Фокала
команда |
описание |
аналог в Бейсике
|
COMMENT |
комментарий (текст следом за командой игнорируется) |
REM
|
TYPE |
вывод на консоль значений констант и выражений |
PRINT
|
QUIT |
штатное завершение выполнения программы |
END
|
SET |
присваивание значения переменной (или элементу массива) |
LET
|
ASK |
ввод значений с консоли |
INPUT
|
GOTO |
безусловный переход |
GOTO
|
DO |
вызов подпрограммы |
GOSUB
|
RETURN |
возврат из подпрограммы |
RETURN
|
IF |
ветвление по значению выражения |
частично соответствует IF
|
Интерпретатор языка распознаёт команды по первой её букве, поэтому нет необходимости писать их полностью. Существовали также версии Фокала с ключевыми словами на европейских языках (поставляемые DEC).
Примеры программ
Стандартный пример Hello World
1.05 C Программа выводит на экран тестовую строку
1.10 T "Hello World !" !
1.20 Q
Решение квадратного уравнения вида ax + bx + c = 0
1.05 C **** Программа для решения квадратного уравнения вида ax^2 + bx + c = 0
1.10 T "Введите коэффициенты a, b, c для уравнения ax^2 + bx + c = 0" !
1.20 A "a = ", a ! "b = ", b ! "c = ", c
1.30 T ! "Решаем уравнение (", a, ")x2 + (", b, ")x + (", c, ") = 0" !
1.35 C **** Вычисляем дискриминант
1.40 S d = b^2 - 4*a*c
1.50 T ! "D = ", d !
1.55 C **** Выясняем количество корней
1.60 I (d) , 3, 4
1.65 С **** первая метка пропущена, поэтому при значении D
1.66 C **** меньшем нуля мы попадаем на следующую за IF строку
2.05 С **** Отрицательный дискриминант - корней нет
2.10 T "Уравнение не имеет действительных корней" !
2.20 Q
3.05 С **** Нулевой дискриминант - один корень
3.10 T "Уравнение имеет один корень" !
3.20 S s = 0
3.30 D 5
3.40 T "x = ", x !
3.90 Q
4.05 С **** Положительный дискриминант - два корня
4.10 T "Уравнение имеет два корня" !
4.20 S s = FSQT(d)
4.30 D 5
4.40 T "x1 = ", x !
4.50 S s = -s
4.60 D 5
4.70 T "x2 = ", x !
4.90 Q
5.05 C **** Подпрограмма вычисления корня, где s - корень дискриминанта со знаком
5.10 S x = (s - b) / (2*a)
5.90 R
Метки строк в Фокале имеют вид <номер_группы>.<номер_строки> . В командах GOTO , IF , DO может указываться как полная метка, так и номер группы без номера строки (вызывает переход на строку с наименьшим номером в этой группе).
Восклицательный знак («! ») в командах ASK и TYPE (ввод-вывод с консоли) является (наравне с запятой) разделителем аргументов, и вызывает перевод строки перед вводом или выводом следующего элемента списка.
Команда IF вычисляет значение выражения и переходит по одной из трех меток из предоставленного списка в зависимости от результата — отрицательного, нулевого или положительного. Если метка опущена, то управление передается на следующую за IF строку.
Примечания
Литература- Абрамов В. А., Стрижков А. В., Федоров А. Р. Диалоговый язык ФОКАЛ. — М. : Высшая школа, 1991. — Кн. 4. — 79 с. — (Программное обеспечение МикроЭВМ). — ISBN 5-06-001785-0.
- Фролов Г. И., Куправа Г. А., Чаиров Ю. Г. и др. Программирование на языке ФОКАЛ / Под редакцией Л. Н. Преснухина. — М. : Изд. МИЭТа, 1984.
- Писаревский А. Н., Осетинский Л. Г., Осетинский М. Г. ФОКАЛ — диалоговый язык для миниЭВМ. — Л. : Машиностроение. Ленинградское отделение, 1985. — 195 с.
- Писаревский А. Н., Осетинский Л. Г., Осетинский М. Г. ФОКАЛ для микро- и мини-компьютеров. — Л. : Машиностроение. Ленинградское отделение, 1988. — 303 с. — ББК 32.97 О75. — УДК 681.3.06(G). — ISBN 5-217-00323-5.
- Фокал снаружи и изнутри. (пишется) (неопр.). Дата обращения: 30 ноября 2016. Архивировано 30 ноября 2016 года.
Ссылки
|
|