Предотвращение возврата без среза
Довольно плохо знаком с прологом и пытаюсь решить некоторые упражнения. Учитывая базу знаний компонентов
component(ElementX,ElementY,Qty).
ElementX uses ElementY in it's structure in quantity Qty.
component(car, door, 4).
component(car, wheel, 4).
component(wheel, tire, 1).
Я хочу найти каждый элемент ElementX, который не является элементом ElementY одновременно.
Это ожидаемый результат
?-final_product(X).
X = car;
false.
Что заставляет меня верить, что я не могу использовать разрез, так как я получаю это
?-final_product(X).
X = car.
и если я не буду препятствовать возвращению назад, я получу только
?-final_product(X).
X = car;
X = car;
false.
Как именно я достигну ожидаемого результата?
РЕДАКТИРОВАТЬ:
final_product(X):-
setof(X, (component(X, _, _), \+component(_, X, _)), Results),
member(X, Results).