GEORGE (язык программирования)

редактировать

GEORGE (Генератор общего порядка) - это язык программирования, изобретенный Чарльз Леонард Хэмблин в 1957 году.

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

Включенный язык циклы, подпрограммы, условные выражения, векторы и матрицы.

Алгебраические выражения были написаны в обратной польской нотации; таким образом, a + b {\ displaystyle a + b}a + b было записано a b +, и аналогично для других арифметических операций вычитания, умножения и деления.

Алгебраическое выражение ax 2 + bx + c {\ displaystyle ax ^ {2} + bx + c}ax ^ {2} + bx + c было записано ax dup × × bx × + c +, где «dup» означало «дублировать значение».

Следуя обратной польской форме, оператор присваивания для вычисления формулы y = ax 2 + bx + c {\ displaystyle y = ax ^ {2} + bx + c}{\ displaystyle y = ax ^ {2} + bx + c} было записано как ax dup × × bx × + c + (y).

Компьютер вычислил выражение следующим образом: значения a, затем x, были помещены в верхнюю часть стека аккумулятора ; 'dup' заставлял копию самого верхнего значения (x) помещаться на вершину стека аккумулятора; Умножение (×) привело к тому, что два верхних значения, а именно, xи x, были удалены (вытянуты) и умножены, возвращая произведение в верхнюю часть аккумуляторная батарея. После второго умножения (×) два верхних значения в стеке (а именно, aи x ** 2) выталкиваются и умножаются, и продукт (a × x ** 2), который должен быть помещен в верхнюю часть аккумуляторной батареи. И так по остальным компонентам выражения. Последняя операция, а именно (y), вернула значение выражения в хранилище без изменения состояния стека аккумулятора.

Если предположить, что значение в верхней части стека накопителя не требуется немедленно, оно будет удалено (очищено) с помощью оператора (;).

Следующая программа считывает восемь значений и формирует их сумму:

0, 1, 8 rep (j) R +] (P)
Первая строка инициализирует сумму нажатием нулевое значение в верхнюю часть стека аккумулятора.
Вторая строка вводит цикл, произносится как «от 1 до 8 повторяется для j» и заканчивается квадратной скобкой.
В третьей строке R заставляет одно число считываться и помещаться в верхнюю часть стека аккумулятора, а знак плюс (+) заставляет это значение добавляться к (частичной) сумме, оставляя только частичную сумму на верх стека накопителя.
После завершения цикла (P) заставляет перфорировать окончательную сумму на карте.

Манипуляции с векторами и матрицами требуют записи нижнего индекса. В GEORGE нижний индекс (и) предшествует имени вектора или матрицы. Таким образом, A (j) было записано j | А. Следующая программа считывает в векторе a 10 значений, затем формирует квадраты этих значений и, наконец, печатает эти значения.

1, 10 R1 (a) 1, 10 rep (j) j | дубликат * j | (а); ] 1, 10 P1 (a)
В программе первая строка представляет собой вектор, считываемый, который считывает десять значений от a (1) до (10).
Вторая строка вводит цикл для прохождения десяти значений j.
Третья строка выбирает (j), дублирует его, умножает эти два значения, давая квадрат, а затем сохраняет его в (j). Обратите внимание на точку с запятой (;), которая очищает (или отменяет) верхнюю запись в стеке аккумулятора. Если бы этого не было сделано, аккумулятор постепенно заполнялся бы квадратами значений.
Последняя строка - это векторный штамп (т.е. печать) для записи десяти квадратов.
Таблица кодирования GEORGE
1234567815
0/016aq(a)(q)logR
1,//117br(b)(r)exp(P)
2;~218cs(c)(s)pow
3*319dt(d)(t)rem
4420eu(e)(u)sqrt
5+]521fv(f)(v)грех
6-622gw(g)(w)cos
7×723hx(h)(x)
8÷rep824iy(i)(y)R1
9negI925jz(j)(z)P1
10mod1026kα(k)(α)R11
11max1127lβ(l)(β)P11
12dup1228mγ(м)(γ)
13rev1329nλ(n)(λ)
14=1430Θμ(Θ)(μ)
15>1531pω(p)(ω)

Приведенная выше таблица кодирования GEORGE помогает записать программу на перфокарты.

Условные операции были записаны как переходы, а именно: если a>0 перейти к 5 (который переходит в метку 5, если a больше нуля), будет записано

0 a>5 ↑

Метка 5 обозначена включением * 5 в другом месте программы. Были записаны безусловные передачи. 5 ↑

Вызов подпрограммы был сделан со стрелкой вниз,.g., Чтобы вызвать подпрограмму с меткой 17, напишите 17 ↓, где метка 17 была закодирована с использованием столбца 3 приведенной выше таблицы.

Историческая справка

В первой версии, запущенной к маю 1957 года на English Electric DEUCE, все значения хранились в двоичной форме с фиксированной точкой в ​​32-битном слове., с 16 двоичными разрядами.

Во второй версии, представленной в 1958 году, значения содержались в форме с плавающей запятой, по одному значению на слово: 22 бита для мантиссы и 10 бит для экспоненты.

Требовалась какая-то таблица кодирования, потому что печатное оборудование того времени давало только 26 букв алфавита, десятичную точку, знак плюс, минус и косую черту.

Ссылки
Последняя правка сделана 2021-05-21 08:49:23
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте