GEORGE (Генератор общего порядка) - это язык программирования, изобретенный Чарльз Леонард Хэмблин в 1957 году.
Он был разработан на основе всплывающего окна для арифметических операций и использовал обратную польскую нотацию.
Включенный язык циклы, подпрограммы, условные выражения, векторы и матрицы.
Алгебраические выражения были написаны в обратной польской нотации; таким образом, было записано a b +
, и аналогично для других арифметических операций вычитания, умножения и деления.
Алгебраическое выражение было записано ax dup × × bx × + c +
, где «dup
» означало «дублировать значение».
Следуя обратной польской форме, оператор присваивания для вычисления формулы было записано как 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)
Манипуляции с векторами и матрицами требуют записи нижнего индекса. В GEORGE нижний индекс (и) предшествует имени вектора или матрицы. Таким образом, A (j) было записано j | А
. Следующая программа считывает в векторе a 10 значений, затем формирует квадраты этих значений и, наконец, печатает эти значения.
1, 10 R1 (a) 1, 10 rep (j) j | дубликат * j | (а); ] 1, 10 P1 (a)
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 15 | ||
---|---|---|---|---|---|---|---|---|---|---|
0 | / | 0 | 16 | a | q | (a) | (q) | log | R | |
1 | , | // | 1 | 17 | b | r | (b) | (r) | exp | (P) |
2 | ; | ~ | 2 | 18 | c | s | (c) | (s) | pow | |
3 | * | 3 | 19 | d | t | (d) | (t) | rem | ||
4 | ∨ | 4 | 20 | e | u | (e) | (u) | sqrt | ||
5 | + | ] | 5 | 21 | f | v | (f) | (v) | грех | |
6 | - | ↓ | 6 | 22 | g | w | (g) | (w) | cos | |
7 | × | ↑ | 7 | 23 | h | x | (h) | (x) | ||
8 | ÷ | rep | 8 | 24 | i | y | (i) | (y) | R1 | |
9 | neg | I | 9 | 25 | j | z | (j) | (z) | P1 | |
10 | mod | 10 | 26 | k | α | (k) | (α) | R11 | ||
11 | max | 11 | 27 | l | β | (l) | (β) | P11 | ||
12 | dup | 12 | 28 | m | γ | (м) | (γ) | |||
13 | rev | 13 | 29 | n | λ | (n) | (λ) | |||
14 | = | 14 | 30 | Θ | μ | (Θ) | (μ) | |||
15 | > | 15 | 31 | p | ω | (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 букв алфавита, десятичную точку, знак плюс, минус и косую черту.