Как указал Даниил, вы должны попытаться найти решение самостоятельно.
Вы можете получить результат только с помощью одного findall/3, используя append/3, чтобы получить вместе первый элемент пары и остальных элементов, а для одного элемента/2 достаточно выбрать второй элемент пары.
Конечно, фактическое решение гораздо менее подробное и понятное. Вы узнаете много, если вы пытаетесь собрать его ...
all_pairs(L, R) :-
findall((A,B), (..., ...), R).
дает
?- all_pairs([a,b,c],L).
L = [ (a, b), (a, c), (b, c)].
редактировать Вам просто нужно исправить детали:
...((A,B), (append(_, [A|T], L), ...), R).
для генерации контекстуально и первый элемент, и вы знаете, как получить B.
Обратите внимание, что [A, B] он отличается от (A, B), который вам нужен в вопросе.
Какая часть этого задания вас сбивает с толку? Что вы пробовали писать? Трудно дать общую помощь в решении этой проблемы, которая не будет давать вам полный ответ. Я предполагаю, что, поскольку вы студент, вы не хотите совершать академические мошенничества, обманывая. –
Это то, что я сделал до сих пор: пары (L, R): - findall ((A, B), (член (A, L), член (B, L), A \ == B), R). Но я не получаю 3 пары, я получаю 6 .. Это результат: L = [(a, b), (a, c), (b, a), (b, c), (c, a), (c, b)]. Мне нужно только (a, b), (a, c), (b, c) –