To run the program, just do "hrr". When the program starts up, you'll be asked for the length to use for all vectors and the maximum number of symbols you'll store in the "item memory". The memory is really just an array of vectors and an array of symbol names. A noisy vector is compared with all of the symbol vectors, and the closest (largest dot product) is returned. Then you'll be prompted for the symbol names. For each of these, a separate vector will be generated with values picked according to the Gaussian distribution (mean = 0, sd = 1/sqrt(VectorLength)). Next you test the vectors by adding, convolving, and correlating them. To create a*b + c*d, 1 n (new vector): a 2 * (convolve): b 3 n (new vector): c [this saves a*b as the "old" vector] 4 * (convolve): d 5 >o (store as old) To test it, 1 # (correlate): c [ this yields c # (a*b + c*d) ] 2 S (find closest symbol) [this hopefully gives you "d"] 3 o> (make old current) 4 # (correlate): a 5 S (find closest symbol) [hopefully "b"] Other than that, you can clean up a vector by replacing it with the vector for the closest symbol. And you can find the dot product between two vectors. This is a measure of recognition, whether some element is in a sum of elements. You'd need to set a recognition threshold for the dot product. Questions, bug reports (yuck) to gasser@cs.indiana.edu.