Event | Partial match pool | Explanation |
---|---|---|
[initial state] |
breakHospitality
e1: ???, guest: ???
e2: ???, host: ???
e3: ???
|
We first create a single, empty partial match for every sifting pattern in the pattern library. |
{eventID: 1, eventType: "enterTown", actor: "Yann"} |
breakHospitality
e1: ???, guest: ???
e2: ???, host: ???
e3: ???
breakHospitality_1
e1: 1, guest: Yann
e2: ???, host: ???
e3: ???
|
Yann arrives in town. We fork the empty partial match and create a new partial match with the first set of variables bound. |
{eventID: 2, eventType: "irrelevantEvent", actor: "Mia"} |
breakHospitality
e1: ???, guest: ???
e2: ???, host: ???
e3: ???
breakHospitality_1
e1: 1, guest: Yann
e2: ???, host: ???
e3: ???
|
An irrelevant event occurs. The pool of partial matches is unchanged. |
{eventID: 3, eventType: "showHospitality", actor: "Eve", target: "Yann"} |
breakHospitality
e1: ???, guest: ???
e2: ???, host: ???
e3: ???
breakHospitality_1
e1: 1, guest: Yann
e2: ???, host: ???
e3: ???
breakHospitality_13
e1: 1, guest: Yann
e2: 3, host: Eve
e3: ???
|
Eve shows Yann hospitality. We again fork off a new partial match with the next set of variables bound. |
{eventID: 4, eventType: "pickpocket", tags: ["harm"], actor: "Eve", target: "Yann"} |
breakHospitality
e1: ???, guest: ???
e2: ???, host: ???
e3: ???
breakHospitality_1
e1: 1, guest: Yann
e2: ???, host: ???
e3: ???
breakHospitality_13
e1: 1, guest: Yann
e2: 3, host: Eve
e3: ???
breakHospitality_134
e1: 1, guest: Yann
e2: 3, host: Eve
e3: 4
|
Eve pickpockets Yann, completing the pattern. We fork off a new match, mark it complete, and remove it from the pool. |
{eventID: 5, eventType: "showHospitality", actor: "Jake", target: "Yann"} |
breakHospitality
e1: ???, guest: ???
e2: ???, host: ???
e3: ???
breakHospitality_1
e1: 1, guest: Yann
e2: ???, host: ???
e3: ???
breakHospitality_15
e1: 1, guest: Yann
e2: 5, host: Jake
e3: ???
breakHospitality_13
e1: 1, guest: Yann
e2: 3, host: Eve
e3: ???
|
Jake shows Yann hospitality. We fork off a new partial match from breakHospitality_1 , with Jake as host instead of Eve. |
{eventID: 6, eventType: "leaveTown", actor: "Yann"} |
breakHospitality
e1: ???, guest: ???
e2: ???, host: ???
e3: ???
breakHospitality_1
e1: 1, guest: Yann
e2: ???, host: ???
e3: ???
breakHospitality_15
e1: 1, guest: Yann
e2: 5, host: Jake
e3: ???
breakHospitality_13
e1: 1, guest: Yann
e2: 3, host: Eve
e3: ???
|
Yann leaves town. We mark all remaining partial matches involving Yann as dead and remove them from the pool. |
{eventID: 7, eventType: "chaseAndThreaten", tags: ["harm"], actor: "Jake", target: "Yann"} |
breakHospitality
e1: ???, guest: ???
e2: ???, host: ???
e3: ???
|
Jake harms Yann—but there's no valid partial matches left for this event to attach to, so nothing happens. |