Посмотрите на след, и вы увидите проблему:
?- trace, brother_in_law(prins-daniel, Y).
Call: (9) brother_in_law(prins-daniel, _11346) ? creep
Call: (10) brother(prins-daniel, _11680) ? creep
Call: (11) man(prins-daniel) ? creep
Exit: (11) man(prins-daniel) ? creep
Call: (11) parent(_11678, prins-daniel) ? creep
Call: (12) father(_11678, prins-daniel) ? creep
Fail: (12) father(_11678, prins-daniel) ? creep
Redo: (11) parent(_11678, prins-daniel) ? creep
Call: (12) mother(_11678, prins-daniel) ? creep
Fail: (12) mother(_11678, prins-daniel) ? creep
Fail: (11) parent(_11678, prins-daniel) ? creep
Redo: (11) man(prins-daniel) ? creep
Fail: (11) man(prins-daniel) ? creep
Fail: (10) brother(prins-daniel, _11680) ? creep
Fail: (9) brother_in_law(prins-daniel, _11346) ? creep
false.
Кто отец prins-daniel
?У тебя нет факта для этого.Кто такая мать?У вас нет фактов для этого тоже.В результате вы не можете найти братьев, поэтому запрос не выполняется.
Означает ли это, что вы упускаете факты или код?Кодекс гласит, что X и Y являются зятями, если у X есть брат Z, который женат на Y. Это единственный способ иметь зятя?
Примечание: prins-daniel
не является атомом в Прологе, как это было бы в Лиспе.Это термин:
?- write_canonical(prins-daniel).
-(prins,daniel)
Ситуация усугубляется более длинными терминами:
?- write_canonical(johann-georg-av-hohenzollern).
-(-(-(johann,georg),av),hohenzollern)
Просто что-то, о чем нужно знать.