Довольно плохо знаком с прологом и пытаюсь решить некоторые упражнения.Имея базу знаний о компонентах
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).