prolog问题使用否定运算符找+最大值\ +

时间:2011-03-15 17:22:28

标签: prolog max negation

我有一些值H,我想找到最大的一个使用\ +,我该怎么办?

maxValue(X) :-
  Get(Id, X),
  \+( Get(Id, Y), X < Y ).

没有线索....请帮助,谢谢!

2 个答案:

答案 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)