Я пытаюсь сделать пересечение двух списков (то есть список C содержит те и только те элементы, которые находятся в A и B), но, насколько я понимаю, я получаю дизъюнкцию из 2 списков + любое количество любых элементов в C .Как создать предикат «пересечение 2 списков»?
Предназначен для работы как: (!? Я считаю, что X должен перебирать ВСЕ член C)
- , если X находится в C, то оно должно быть как в а и в В.
- предиката :
d(A,B,C) :- (member(X,D)->member(X,A),member(X,B)).
Можете ли вы сказать: Является ли мое предложение и предикат не равными или я сделал еще одну ошибку?
пример:
?- [user].
|: d(A,B,C) :- (member(X,D)->(member(X,A),member(X,B))).
|: % user://1 compiled 0.01 sec, 612 bytes
true.
?- d([a,b],[b,c],C)
| .
C = [b|_G21] .
?- d([a,b],[b,c],[b]).
true .
Это называется пересечение не дизъюнкции – false
" Disjunction "означает" логический ИЛИ "или (более свободно)" union ". «Конъюнкция» будет «логическим И» или (более свободно) «пересечением». – lurker