У меня есть список списков переменных L1, единый список переменных L2 и список списков переменных L3, в которых элементы являются подсписками L1, которые совместно используют переменную с L2.
У меня есть предикат common_v (L1, L2, L3), который возвращает элементы L3, но только по одному за раз.
Это работает так:
?- L1= [[A,B,C],[D,C,A],[B,F,E],[G,H,I]],
L2= [C,X,Z],
common_v([[A,B,C],[D,C,A],[B,F,E],[G,H,I]],[C,X,Z],L3).
L1= [[A,B,C],[D,C,A],[B,F,E],[G,H,I]], L2= [C,X,Z], L3= [A,B,C];
L1= [[A,B,C],[D,C,A],[B,F,E],[G,H,I]], L2= [C,X,Z], L3= [D,C,A];
false.
Но это должно работать как это:
L1= [[A,B,C],[D,C,A],[B,F,E],[G,H,I]],
L2= [C,X,Z],
common_v([[A,B,C],[D,C,A],[B,F,E],[G,H,I]],[C,X,Z],L3).
L1= [[A,B,C],[D,C,A],[B,F,E],[G,H,I]], L2= [C,X,Z], L3= [[A,B,C],[D,C,A]].
Как я могу это реализовать? Предикат common_v определяется следующим образом:
common_v(L1,L2,L3):- member(L,L1),member(E,L2),member(F,L),E==F.