[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

name spaces



Tree or graph shaped name spaces are not always easy to organize. The lobby
and name inferencer in Self are nice, but here is an alternative I am 
trying : set intersection.

First we need a method to calculate the intersection of two sets. This is
not a very good one, but it works:

traits set _DefineSlots: ( |
    $ aSet = ( | inter |
        inter: set copy.
        do: [ | :e | ( aSet includes: e ) ifTrue: [ inter add: e ] ].
        inter size == 0 ifTrue: [ ^ nil ].
        inter size == 1 ifTrue: [ inter do: [ | :e | ^ e ] ].
        ^ inter.
    ).
| )

Now we make some sets accessible from the lobby :

_DefineSlots: ( |
    nameSets* = ( |
        big    = set copy.
        small  = set copy.
        yellow = set copy.
        red    = set copy.
        car    = set copy.
        fruit  = set copy.
    | ).
| )

Place some objects in those sets :

big add: 1
yellow add: 1
car add: 1
small add: 2
yellow add: 2
car add: 2
big add: 3
red add: 3
car add: 3
small add: 4
red add: 4
car add: 4
big add: 5
yellow add: 5
fruit add: 5
small add: 6
yellow add: 6
fruit add: 6
big add: 7
red add: 7
fruit add: 7

Can you guess what the following give you ?

red
red$car
big$red$car
big$fruit
fruit

How can I get this ( useful, in my opinion ) effect with trees or graphs?
What are the disadvanteges of this method ( besides performance ) ?

- Jecel