我有一些值 H,我想使用 \+ 找到最大值,我该怎么做?
maxValue(X) :-
Get(Id, X),
\+( Get(Id, Y), X < Y ).
没有线索....请帮助,谢谢!
使用否定是找到最大值的一种方法。它确实有效。这是一个例子:
p(2).
p(1).
p(3).
?- p(X), \+ (p(Y), Y > X).
X = 3
但是复杂度将是 O(n*n),其中 n 是事实的数量。但最大值可以在 O(n) 中确定。因此,对于大型事实库,以下方法可能更有效:
:- dynamic(the_max/1).
update_max(X) :-
the_max(Y), X>Y, !, retract(the_max(Y)), assertz(the_max(X)).
update_max(_).
find_max(X) :-
assertz(the_max(0)),
(p(Y), update_max(Y), fail; true),
retract(the_max(X)).
?- find_max(X).
X = 3
但是要注意,当你从多个线程中使用它时,你需要稍微调整一下,即将 the_max 线程本地化。
此致
另请参阅这些问题/答案: