The intersection rule sheet can operate on an arbitrary number of collections and will find the set of cars that is common to all of the collections. It does this by eliminating any car not found in a different collection.
This has the advantage that it’s nice and simple, but suffers from the disadvantage that we are deleting the cars that are not in all the groups. Suppose we want to make a collection of the cars in all groups while leaving the other cars alone. How can we do this?
Here’s one way:
Condition b is a little odd looking. If rule 1 fails to find the car in any other group then the attribute existsInAnotherGroup is set to F (just one is enough). When we get to rule 2 we are looking for just those cars that DID NOT get flagged with F (they will still be null). Those are the ones that must be in every group.
The cars in the Intersection object are references to the original cars that still remain in the initial groups.
Also note that even though Ford T is repeated in different groups its physically a different car (just with the same make and model)
If we want the original groups to reference single instances of each make and model we’d do it like this:
Each make and model is now only defined once and each group makes a reference to it.
Note: In order to create this test data where more than one group references the SAME car you need to drag an associated car from the vocabulary to a Group but then hold down the SHIFT key before releasing the mouse button. This will then present a menu of cars that you can select to be associated with that group.
Only cars not already associated with that group will be available to select.
Also, since a physical car can now belong to one or more groups, it’s necessary to modify the vocabulary to allow a many-to-many association between Groups and Cars.
We don’t need to change the rule sheet.
This disjunction rule sheet operates on TWO collections
It won’t work if you have more than two collections. Can you see why? Can you create a rule sheet that WILL work with more than two collections?
Here’s one way to do it
Remember that Corticon will apply rule 1 to all cars in all groups before moving on to rule 2
Applied to the original four groups we get this output:
Action A sets all the index values to zero.
Action B sets every index 1 more than the max value (so far).
So each time Thing has its index value set, there is a new max value for the next Thing.
Download PDF version.