Почему Prolog сопоставляет переменную с результатом, который не работает, если подключен напрямую?

Я делаю программу Prolog, которая находит подмножество набора списков. Это подмножество должно соответствовать некоторым конкретным условиям, аспектом которых является то, что списки подмножества не могут быть идентичными. Что меня смущает, так это то, что когда я пытаюсь найти соответствие для переменной X, он генерирует результаты, которые возвращают false, если я подключаю их к запросу вместо X. Например:

?- containsSet(2, [[3],[7],[7]], X).
X = [[3], [7]] ;
X = [[3], [7]] ;
X = [[7], [7]] ;
false.

?- containsSet(2, [[3],[7],[7]], [[7],[7]]).
false.

Как оно может соответствовать X [[7], [7]], если при подключении напрямую возвращает false?

Идея containsSet состоит в том, чтобы найти подмножество списков длиной N (в данном случае 2), у которых нет совпадающих элементов в совпадающих позициях (т.е. нет двух списков в подмножестве с одинаковым первым элементом или одинаковым вторым элементом и т. Д.) , В приведенном выше примере первые (и единственные) элементы [7] и [7] совпадают, поэтому он возвращает false.

Ответы на вопрос(0)

Ваш ответ на вопрос