2015-12-06 3 views
3

пытается реализовать соответствие, которое является ограниченной формой унификации.Соответствие искусственному интеллекту, унификация

пытается совместить две формулы, если мы сможем найти замены для переменных, входящих в формулы, так что они синтаксически эквивалентны .

Мне нужно написать функцию, которая определяет, соответствует ли константа , соответствующая основному термину, такой как Brother (George) и шаблон , соответствующий количественной формуле, такой как Brother (x). Если они соответствуют функции, возвращает набор подстановок, называемых привязками , которые преобразуют переменные в термины. Постоянная соответствует другой константе, если они равны . Несвязанная переменная (в настоящее время без привязки) соответствует любой формуле. Связанная переменная соответствует константе, если константа и значение , к которым привязана переменная, равны.

примеров:

матч (Любление (собака (Fred), Фред)

Любления (х, у))

верно с й = Dog (Fred) и у = Фред

еще один

матч (Loves (Dog (Fred), Фред)

Loves (х, х)

терпит неудачу

+0

Почему бы вам не использовать пролог? Он поставляется с унификацией бесплатно – dpalma

+0

Реализовать как регулярное выражение? На каком языке? Sed? Perl? Grep? К сожалению, для нас существуют различные варианты регулярных выражений. – Beta

+0

пытается сделать в Python? – user3769499

ответ

1

Понятие MGUS т.е. Большинство генерала объединителей, кажется, использования здесь , Методология решения проиллюстрирована ниже.
. У нас есть начальный пустой набор с именем mgu и еще один пустой набор E.

mgu = {} 
G = match(Loves(Dog(Fred),Fred),Loves(x,y)) 
E = {Loves(Dog(Fred),Fred),Loves(x,y)} 


mgu = {Fred|y}    // Replace Fred by y, variables to be replaced first. 
G = match(Loves(Dog(y),y),Loves(x,y)) 
E = {Loves(Dog(y),y),Loves(x,y)} 


mgu = {Fred|y,Dog(y)|x} // Replace Dog(y) by x 
G = match(Loves(x,y),Loves(x,y)) 
E = {Loves(x,y)}   // E becomes a singleton set here, we stop here. 
          // No more substitutions are possible at this stage. 

матч() возвращаетИстинных если E становится одноэлементным набором, когда больше замен не возможны, иначе Ложных. И mgu может быть возвращен как необходимый набор замещений.

G = True 
mgu = {Fred|y,Dog(y)|x} 

Другой пример можно проиллюстрировать следующим образом.

mgu = {} 
G = match(Loves(Dog(Fred),Fred),Loves(x,x)) 
E = {Loves(Dog(Fred),Fred),Loves(x,x)} 


mgu = {Fred|x}    // Replace Fred by x. 
G = match(Loves(Dog(x),x),Loves(x,x)) 
E = {Loves(Dog(x),x),Loves(x,x)} 


mgu = {Fred|x,Dog(x)|y}  // Replace Dog(x) by y 
G = match(Loves(y,x),Loves(x,x)) 
E = {Loves(y,x),Loves(x,x)} // E does not becomes a singleton set here. 
           // But no more substitutions are 
           // possible at this stage. 

Поэтому

G = False 
+0

Можете ли вы помочь мне разобрать их на Python? Я знаю, что пролог легко сделать это, , поэтому в Python мне нужно разделить запятую, но что делать, если есть запятая? – user3769499

Смежные вопросы