У меня есть школьный проект, где я должен работать с Prolog. Это все новое для меня, поэтому у меня есть некоторые проблемы.
У меня есть такой список:
List = [(_,_,_),(_,_,_),(_,_,_)]
Я должен получить от ввода информацию о каждом члене, через несколько предикатов, которые я должен создать.
Один из них типа:
predicate(M1,M2,M3, List)
и он говорит, что M1 является либо M2, либо M3, но не тем и другим одновременно. Например,
predicate((_,a,_),(2,_,_),(3,_,_),List)
утверждает, что член с «а» имеет либо 2, либо 3 в первом поле.
Я пытался всю ночь, но не могу найти решение. Я считаю, что мне нужно использовать унификацию, но не знаю, как это сделать.
Я пробовал это:
predicate(M1,M2,M3,[_]) :- (M1=M2), not(M1=M3).
predicate(M1,M2,M3,[_]) :- (M1=M3), not(M1=M2).
Это может показаться смешным, но, как я уже сказал, Пролог совершенно новый для меня, и я не совсем понимаю, как он работает.
Любая подсказка приветствуется. Спасибо!
РЕДАКТИРОВАТЬ:
Пример:
person(name,age,job).
List = [(einstein,_,_),_,_].
Итак, теперь у меня есть список из 3 человек, с Эйнштейном на первой позиции.
predicate = ((einstein,_,_),(_,87,_),(_,23,_), List).
List = [(einstein,87,_),_,_)];
List = [(einstein,23,_),_,_)].
Выше приведены 2 допустимых списка после применения предиката.
Это должна быть простая проблема, но я не могу понять это.
Спасибо!