The primitive ``WriteWeight'' is redefined and gets an additional argument. The primitive ``GetInput'' is redefined and gets a new name: ``ReadWeight''. There is no separate WeightPointer any more, and no automatic increment mechanism for WeightPointer's position. Instead, the new primitives may directly address, read and write the network's weights. The other primitives remain the same. Here are the two new ones, together with their instruction numbers (compare section 5):
Appropriate syntax checks halt programs whenever they attempt to do something impossible, like writing a non-existent weight. Since the new ``WriteWeight'' primitive has an additional argument (to be guessed correctly), successful programs tend to be less likely.
RESULTS. Out of runs using up a total search time of time steps, 3 runs generated weight vectors fitting the training data. All of them allowed for perfect generalization on all the test data. During execution, one of them filled the storage as seen in table 5. The program ran for 399 out of 1024 allocated time steps. Its space probability was . What it does is this:
(0) Allocate one cell on the work tape. Initialize with zero. Set Min = Min-1.
(2) Increment the contents of address -1.
(4) Make equal to the contents of address -1.
(7) Jump to address 0.
Repeated execution of the instruction at address 0 unnecessarily allocates 100 cells of the work tape but does not do any damage other than slightly slowing down the program.
Using different sets of 3 training examples (obtained by randomly permuting the input units that are never on), led to very similar generalization results.