# Plankalkül

## Spec

### Variables

 V parameters (r/o) Z temporaries (r/w) R results (w/o) C constants (?)

Variables are initialized the first time they're assigned to, subsequent assignments are simply normal assignments.

### 2D syntax 'sidebar'

In the 2D notation there is a vertical column on the right where the value of elements in that row is indicated:

``` |Main Line
V|Variable Number
K|Component Number (Komponenten-Index)
S|Comment Line (Struktur-Index)
```

So, as an example:

``` |Z  ^ Z
V|4    2
K|2.3
S|0    0
```

(from page 8 in the Zuse PDF). This is (probably) equivalent to:

```Z4[2.3] ^ Z2
```

in the linear notation.

Note: not quite sure what the operator means yet, possibly greater-than.

### Primitives

The only primitive type is boolean (or a bit). They are denoted by S0.

### Arrays

Arrays can be made up of any other data type. For example:

```8 × S0
```

is an array of 8 bits whereas:

```n × 4 × S0
```

is an n-length array with each element being a 4-length array of bits.

Arrays can be subscripted:

``` |V
V|0
K|1
```

means the 1st component of V0 (linear syntax is V0).

### Records

Page 2 of Bauer alludes to 'records' of the form (A2, A3). We need more info here.

### Operators

Note that this list is vastly incomplete.

 = Equality test => Assignment + Addition - Subtraction (inferred, may not exist)

### The µ operator

``` µx(x ∈ V ^ R(x))
0
```

Apparently this means 'The next element of V0 for which the procedure call R returns true'.

### Conditionals

Conditionals are of the form expression -> statement. There is no else clause. There is also no 'or' for the expression.

### Loops

Loops are initiated using the letter W. I don't really understand anything beyond that.

## Questions

• Are S (and maybe A) variables or types or constants or what? We know S0 is the boolean bit, S1 is an array of boolean bits and apparently S2 is a constant of some type.
• What is the difference between S and A?
• How is a function declared? The Bauer PDF gives this syntax:
```P17 |R(V) => (R, R)
V|  0      0  1
S|  α      α  0
```

but.. how is this function called?, how do you actually define stuff to occur in the function, is the 'FIN' end symbol used?

• Are the S lines actually taken into account? Do they define the structure of the index?

## Implementation

Is the 2d syntax representable in ascii in some obvious way? What are the advantages of the 2d syntax?