基本上我有一个这样的事实清单:
set(x,2).
set(x,7).
set(x,10).
set(x,4).
我需要找到这个集合的最大元素。
Input: maximum(x, MaxElement)
Output: MaxElement = 10.
现在这个想法本身并不复杂,我自己在网上看到了很多例子。问题是我需要使用fail谓词。
这是我的想法(不起作用):
maximum(Set, Element1):-
set(Set,Element1),
set(Set,Element2),
Element2 > Element1,
fail.
maximum(Set, Element) :- set(Set, Element).
这里的想法是,第一条规则查找集合中具有更大元素的每个元素。如果有更大的元素,我们就会失败并停止。
然后,理想情况下,对于最大的一个 (10),我们不会失败并继续执行下一个规则,该规则只会看到它在集合中并返回 true。
但像这样,每个数字仍然遵循第二条规则。而且使用 cut 似乎也不起作用。
大家有什么想法吗?