def leftActivation(self, tok, wme): assert isinstance(tok, Token), \ "tok non e' un Token" assert isinstance(wme, WME), \ "wme non e' un WME" new_result = Token(self, tok, wme) # Cerchiamo il token padre di questo che possa rappresentare # correttamente l'owner del nuovo token. # risaliamo il percorso per trovare il token che e' emerso # dalla join della precedente condizione owner_t = tok owner_w = wme for _ in range(0, self._conjuctions): owner_w = owner_t.get_wme() owner_t = owner_t.get_parent() # cerchiamo per un token nella memoria del nodo ncc # che abbia gia come owner owner_t trovato e # come wme l'wme trovato for ncc_token in self._nccnode.get_items(): assert isinstance(ncc_token, Token) if ncc_token.get_parent() == owner_t \ and ncc_token.get_wme() == owner_w: # c'e' ne gia uno # aggiungiamo new_result come # nuovo figlio ncc-result del token # trovato (e chiaramente colleghiamo come owner # l'owner trovato al nuovo result ncc_token.add_nccresult(new_result) new_result.set_owner(ncc_token) # visto che il token ha avuto un match # dobbiamo provvedere ad eliminare tutti # gli eventuali discendenti che ci sono # in quanto la condizione negativa # non e' piu valida ncc_token.deleteDescendents() # abbiamo trovato un match, non ha senso continuare # oltre nel ciclo (e nella funzione) return # non abbiamo trovato nessun match nell'ncc-node # questo significa che la sotto-rete negativa # ha trovato un match ma che il ncc-node # non e' ancora stato attivato # (in quanto ultimo dei figli del padre della sottorete) # memorizzo il risultato nel buffer e aspetto # pazientemente l'attivazione # del ncc-node #self._resultbuffer.insert(0, new_result) self._resultbuffer.appendleft(new_result)