GEORGE (programming language)
In 1957, Charles Leonard Hamblin invented the programming language GEORGE.[1] [2] It was designed around a push-down pop-up stack for arithmetic operations, and employed reverse Polish notation. The language included loops, subroutines, conditionals, vectors, and matrices.
Algebraic expressions were written in reverse Polish notation; thus, a + b was written a b +, and similarly for the other arithmetic operations of subtraction, multiplication, and division.
The algebraic expression a.x**2 + b.x + c was written a x dup * * b x * + c + , where 'dup' meant 'duplicate the value'.
Following the reverse Polish form, an assignment statement to evaluate the formula y = a.x**2 + b.x + c was written as a x dup * * b x * + c + (y) .
The computer evaluated the expression as follows: the values of a, then b, were pushed onto the top of the accumulator stack; 'dup' caused a copy of x to be pushed onto the top of the accumulator stack; Multiply (*) caused the top two values, namely, x and x, to be removed (popped) and multiplied, returning the product to the top of the accumulator stack. The second multiply (*) then caused the top two values on the stack (namely, a and x**2) to be popped and multiplied, and the product (a*x**2) to be pushed onto the top of the accumulator stack. And so on the the remaining components of the expression. The final operation, namely (y), returned the value of the expression to storage without changing the status of the stack.
Assuming that the value on the top of the accumulator stack was not required immediately, it would be removed (cleared) by using the operator (;).
The following program reads in eight values and forms their sum:
0, 1, 8 rep (j) R + ] (P)
The first line initialises the sum by pushing the value zero onto the top of the accumulator stack. The second line introduces a loop, is spoken as "for 1 to 10 repeat for j", and is terminated by the square bracket. In the third line, R causes one number to be read in and pushed onto the top of the accumulator stack, and the plus sign (+) causes that value to be added to the (partial) sum, leaving only the partial sum on the top of the accumulator stack. After the loop terminates, the (P) causes the final sum to be punched on a card.
- ^ C. L. Hamblin [1957]: An addressless coding scheme based on mathematical notation. Proceedings of the First Australian Conference on Computing and Data Processing, Salisbury, South Australia: Weapons Research Establishment, June 1957.
- ^ C. L. Hamblin [1957]: Computer Languages. The Australian Journal of Science, 20: 135-139. Reprinted in The Australian Computer Journal, 17(4): 195-198 (November 1985).