Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def kb_retract(self, fact_or_rule):
- """Retract a fact from the KB
- Args:
- fact (Fact) - Fact to be retracted
- Returns:
- None
- """
- printv("Retracting {!r}", 0, verbose, [fact_or_rule])
- ####################################################
- # Student code goes here
- if isinstance(fact_or_rule, Fact) and fact_or_rule in self.facts:
- arg_in_kb = self.facts.index(fact_or_rule)
- if (self.facts[arg_in_kb].asserted is True and not self.facts[arg_in_kb].supported_by) or \
- (self.facts[arg_in_kb].asserted is False and not self.facts[arg_in_kb].supported_by):
- facts_to_be_checked = self.facts[arg_in_kb].supports_facts
- rules_to_be_checked = self.facts[arg_in_kb].supports_rules
- if facts_to_be_checked:
- for fact in facts_to_be_checked:
- self.kb_retract_helper(fact, fact_or_rule, "f")
- if rules_to_be_checked:
- for rule in rules_to_be_checked:
- self.kb_retract_helper(rule, fact_or_rule, "r")
- self.facts.remove(fact_or_rule)
- elif self.facts[arg_in_kb].asserted is True and self.facts[arg_in_kb].supported_by:
- self.facts[arg_in_kb].asserted = False
- elif isinstance(fact_or_rule, Rule) and fact_or_rule in self.rules:
- arg_in_kb = self.rules.index(fact_or_rule)
- if self.rules[arg_in_kb].asserted is False and not self.rules[arg_in_kb].supported_by:
- facts_to_be_checked = self.rules[arg_in_kb].supports_facts
- rules_to_be_checked = self.rules[arg_in_kb].supports_rules
- if facts_to_be_checked:
- for fact in facts_to_be_checked:
- self.kb_retract_helper(fact, fact_or_rule, "f")
- if rules_to_be_checked:
- for rule in rules_to_be_checked:
- self.kb_retract_helper(rule, fact_or_rule, "r")
- self.rules.remove(fact_or_rule)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement