EventPartial match poolExplanation
[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.