Let the command thing create things (which are something like objects, or classes, or frames...) by giving them a name and possibly other information (which gives you multiple one-level inheritance):

thing human legs 2
thing Socrates is-a {human philosopher}

Note that philosopher is a not-yet defined name here, it's just a string, and strings are implicitly also things. Thus, if everything is a string and a string is a thing, then everything is a thing. QED. (But seriously, strings can for instance not necessarily be used as command names, so let's better distinguish little things like strings and real things, of which this page deals).

A little thing can always be raised to a real thing - by calling it "thing". So much for forward references...

Things have properties (variables, facets, ...) that can be set and got in the familiar way:

Artificial intelligence (Artificial Intelligence with Tcl) and semantic nets, also case based reasoning. I once read the following book which had a chapter about this [2] (Actually it was a german translation).

RS: Yes, I didn't credit it, but a few lines from Larry Smith about Self brought me to make up the above. Thanks for the links - just my printer is momentarily stuck...

MSW: It reminds me of MIT OTcl (which btw is the soundest OO system for Tcl I've ever seen :)