2013-03-13 2 views
0

Я новичок в Prolog, и я не могу понять, как получить результат.Как получить пары из одного списка в Prolog?

Я хочу вычислить возможные комбинации пар в списке.

Пример: input - это список [a, b, c], я хочу получить пары (a, b), (a, c), (b, c). Я хочу, чтобы каждая пара была сохранена в виде списка.

Любая помощь очень ценится.

+1

Какая часть этого задания вас сбивает с толку? Что вы пробовали писать? Трудно дать общую помощь в решении этой проблемы, которая не будет давать вам полный ответ. Я предполагаю, что, поскольку вы студент, вы не хотите совершать академические мошенничества, обманывая. –

+0

Это то, что я сделал до сих пор: пары (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) –

ответ

1

Как указал Даниил, вы должны попытаться найти решение самостоятельно.

Вы можете получить результат только с помощью одного 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), который вам нужен в вопросе.

+0

Благодарим за помощь. Это то, что я сделал, используя append: 'pairs (L, R): - findall ([ A, B], (добавить (A, X, L), A \ == [], член (B, X)), R). 'Это результат:' L = [[[a], b], [[a], c], [[a, b], c]]. ' В третьей паре все еще есть ошибка, как я могу это исправить? Ваша помощь очень ценится. –

+0

Добро пожаловать! см. мое редактирование для дополнительной справки – CapelliC

 Смежные вопросы

  • Нет связанных вопросов^_^