Memory that is addressed by content rather than by address; content addressable is often used synonymously. An AssociativeMemory permits its users to specify part of a pattern or key and retrieve the values associated with that pattern. The TupleSpaces that are traditionally used to implement the GenerativeCommunications model are an AssociativeMemory.
Imagine that you were writing a blog engine. Instead of storing blog entries in an array of some sort, addressed by memory address or index into the array, you just create "nodes" out in "space." You don't address these nodes with memory addresses. Rather, you attach information to the node like: "This is of type 'blog entry.'" "The author is so-and-so." "This is the date it was created." "These are the categories it belonged to." Stuff like that.
When you want to retrieve an entry by date, you tell the AssociativeMemory that you want it to give you back "Nodes that are of type 'blog entry,' for which the date they were created on is X." The AssociativeMemory then looks through it's stores for any node that fits that shape, and then returns it to you.
It seems to me that AssociativeMemory is more about the interface you use to access the memory store, than it is about the memory itself.
SELECT statements over a standard SQL database seems to be an AssociativeMemory as well, even though I'm not so sure that's what is intended. I believe that what is intended is that we don't have to think about how tables are laid out - just how an abstract graph is laid out, and pattern-matched against.
"Content-addressable" seems to be used almost exclusively for memory hardware that is designed for associative lookups.
Remove required tables? See MultiParadigmDatabase.
How is this different from PredicateDispatching?
My impression is that PredicateDispatching + AssociativeMemory = implementation of GenerativeCommunication. It is a declarative computation model(?): you state actions to be performed when certain data is seen, and then you specify the data. Notably, the end result is that it is the mere existence of the data which causes the invocation of a function.
However, I'm confusing myself as I write this, so I may be out to lunch.