feat: persistent rules and stuff
So ugly ref: N25B-376
This commit is contained in:
@@ -93,6 +93,33 @@ class Rule:
|
||||
return f"{self.head} :- {self.body}."
|
||||
|
||||
|
||||
@dataclass
|
||||
class PersistentRule:
|
||||
"""
|
||||
Represents an inference rule, where the inferred belief is persistent when formed.
|
||||
"""
|
||||
|
||||
head: Expression
|
||||
body: Expression
|
||||
|
||||
def __str__(self):
|
||||
if not self.body:
|
||||
raise Exception("Rule without body should not be persistent.")
|
||||
|
||||
lines = []
|
||||
|
||||
if isinstance(self.body, BinaryOp):
|
||||
lines.append(f"+{self.body.left}")
|
||||
if self.body.operator == "&":
|
||||
lines.append(f" : {self.body.right}")
|
||||
lines.append(f" <- +{self.head}.")
|
||||
if self.body.operator == "|":
|
||||
lines.append(f"+{self.body.right}")
|
||||
lines.append(f" <- +{self.head}.")
|
||||
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
@dataclass
|
||||
class Plan:
|
||||
"""
|
||||
@@ -148,7 +175,7 @@ class AgentSpeakFile:
|
||||
"""
|
||||
|
||||
initial_beliefs: list[Rule] = field(default_factory=list)
|
||||
inference_rules: list[Rule] = field(default_factory=list)
|
||||
inference_rules: list[Rule | PersistentRule] = field(default_factory=list)
|
||||
plans: list[Plan] = field(default_factory=list)
|
||||
|
||||
def __str__(self):
|
||||
@@ -161,7 +188,11 @@ class AgentSpeakFile:
|
||||
|
||||
if self.inference_rules:
|
||||
sections.append("// --- Inference Rules ---")
|
||||
sections.extend(str(rule) for rule in self.inference_rules)
|
||||
sections.extend(str(rule) for rule in self.inference_rules if isinstance(rule, Rule))
|
||||
sections.append("")
|
||||
sections.extend(
|
||||
str(rule) for rule in self.inference_rules if isinstance(rule, PersistentRule)
|
||||
)
|
||||
sections.append("")
|
||||
|
||||
if self.plans:
|
||||
|
||||
Reference in New Issue
Block a user