У меня есть школьный проект, где мне нужно работать с Prolog. Это для меня все ново, поэтому у меня проблемы.Объединение (?) В Прологе
У меня есть список, как это:
List = [(_,_,_),(_,_,_),(_,_,_)]
Я должен получить от ввода информации о каждом элементе в, через несколько предикатов, которые я должен создать.
Один из них относится к типу:
predicate(M1,M2,M3, List)
, и он говорит, что M1 либо M2 или M3, но не оба. Например,
predicate((_,a,_),(2,_,_),(3,_,_),List)
утверждает, что элемент с 'a' имеет либо 2, либо 3 в первом поле.
Я пробовал всю ночь, но не могу найти решение. Я считаю, что мне нужно использовать объединение, но не знаю, как это сделать.
Я попытался это:
predicate(M1,M2,M3,[_]) :- (M1=M2), not(M1=M3).
predicate(M1,M2,M3,[_]) :- (M1=M3), not(M1=M2).
Это может выглядеть смешно, но, как я сказал, Пролог является совершенно новым для меня, и я не могу вполне понять его функционирование.
Подсказка приветствуется. Благодаря!
EDIT:
Пример:
person(name,age,job).
List = [(einstein,_,_),_,_].
Так что теперь у меня есть список список из 3-х человек, с Эйнштейном в первой позиции.
predicate = ((einstein,_,_),(_,87,_),(_,23,_), List).
List = [(einstein,87,_),_,_)];
List = [(einstein,23,_),_,_)].
Эти два признанных списка после применения предиката.
Это должна быть простая проблема, но я не могу понять это.
Спасибо!
Ну, я попытался объяснить это в вопросе. Не уверен, что еще добавить. Предполагается, что предикат получит свойства около 3 членов списка, что означает, что первый будет таким же, как один из двух других. (hifen - символ подчеркивания, не могу написать его здесь) предикат ((einstein, -, -), (-, 32, -), (-, 45, -), List) означает, что эйнштейн либо например, 32 или 45 лет. – bex91
отредактировал :) Надеюсь, теперь это яснее. – bex91
Извините, я не видел этого вопроса. Я искал, но не заметил. Я считаю, что это относится к моей проблеме. Я постараюсь максимально использовать его. Благодаря! – bex91