防止回切而不会剪切

时间:2018-10-07 23:34:15

标签: prolog prolog-cut

是序言中的新手,并试图解决一些练习。 有了组件的知识库

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

我想同时查找每个不是ElementY的ElementX。

这是预期的结果

?-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 个答案:

没有答案