Создание отношений с унифицированным и регулярным выражением
Я пытаюсь создать отношение с помощью унификации, например:
Мальчик (Майк) -> Майк мальчик
Девушка (Лиза) -> Лиза это девушка
isSister(Майк, Лиза) -> Лиза - сестра Майка
и это мой код:
from fact import Fact
from logic import get, unify, var
from itertools import chain
import regex as re
facts = {}
pattern = r"(\w+)\((?:([^,\)]+)\,(?:([^,\)]+)))+\)\.?"
rule = input('Ingrese un hecho o consulta:')
while rule != '!':
match = re.match(pattern, rule)
print(match)
name = match.captures(1)[0]
argument1 = match.captures(2)
argument2 = match.captures(3)
if rule.endswith('.'):
if not name in facts:
facts[name] = Fact()
facts[name].append(argument1[0])
facts[name].append(argument2[0])
else:
X = var()
Y = var()
for _ in facts[name](X,Y): print(get(X),get(Y))
rule = input('Ingrese un hecho o consulta:')
Что я хочу, так это то, что когда я спрашиваю isSister(?,Lisa), он возвращает Майка. Вот что я получаю:
Traceback (последний вызов был последним): файл "main.py", строка 17, в name = match.captures(1)[0] AttributeError: у объекта 'NoneType' нет атрибута 'captures'
1 ответ
match
возвращается None
если нет совпадения, и это, кажется, происходит где-то в вашем while
петля. Вам нужно как-то разобраться с этим делом, либо:
if match == None:
# handle
или же:
try:
name=match.captures(1)[0]
except AttributeError as e:
# handle
Вы сами выбираете подход, который подходит для вашего решения, но это две модели, которые я обычно использую. Я уверен, что есть и другие, но я бы предложил начать здесь.