Предотвращение возврата без среза

Довольно плохо знаком с прологом и пытаюсь решить некоторые упражнения. Учитывая базу знаний компонентов

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).

0 ответов

Другие вопросы по тегам