我有一些以下形式的Prolog代码:
setof(Element,some_function(P,Element,C),Elements)
这样,Element
解决方案中的some_function
项的所有实例都会收集在列表Elements
中。
我现在希望使用memberchk
对此进行改进,以便只有Element
的任何实例化只会添加到Elements
,如果它不存在于列表List
上}。
我尝试了以下内容:
setof(Element,some_function(P,Element,C,List),Elements)
................
some_function(P,Element,C,List) :-
.... the function as it was ....,
\+ memberchk(Element,List).
这确实有效,因为只添加了不在List
上的元素。但问题是setof
现在因术语Element
的所有实例化都已在List
上而失败。虽然我希望它返回一个空列表Elements
,但不会失败。
关于如何做到这一点的任何想法?谢谢!