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

prolog问题使用否定运算符查找最大值\+,prolog,max,negation,Prolog,Max,Negation,我得到了一些值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 但是复杂性将在*n上,其中n是 事实的数量。但最大值可以是 下定决心。所

我得到了一些值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
但是复杂性将在*n上,其中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
但请注意,当您从多个线程使用它时, 您需要稍微调整一下,即使_max 线程本地


最好的问候

使用否定是找到最大值的一种方法。这真的很有效。 以下是一个例子:

   p(2).  
   p(1).  
   p(3).  

   ?- p(X), \+ (p(Y), Y > X).  
   X = 3
但是复杂性将在*n上,其中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
但请注意,当您从多个线程使用它时, 您需要稍微调整一下,即使_max 线程本地


致以最诚挚的问候参见以下问题/答案:


另请参见以下问题/答案:


请在反斜杠之前放置一个反斜杠,使其成为可见的反斜杠。仅当未标记为代码时才需要。的可能副本请在反斜杠之前放置一个反斜杠,使其成为可见的反斜杠。仅当未标记为代码时才需要。的可能副本