我有一些值H,我想找到最大的一个使用\ +,我该怎么办?
maxValue(X) :-
Get(Id, X),
\+( Get(Id, Y), X < Y ).
没有线索....请帮助,谢谢!
答案 0 :(得分:3)
使用否定是找到最大值的一种方法。它确实有效。 这是一个例子:
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 线程本地。
最好的问候
答案 1 :(得分:1)