0

いくつかの値 H を取得しました。\+ を使用して最大値を見つけたいのですが、どうすればよいですか?

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

手がかりがありません....助けてください、ありがとう!

4

2 に答える 2

3

否定を使用することは、最大値を見つける1つの方法です。そして、それは本当に機能します。次に例を示します。

   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スレッドをローカルにする必要があります。

よろしくお願いします

于 2011-03-15T21:02:15.300 に答える
1

これらの質問/回答も参照してください。

于 2011-03-16T08:53:12.563 に答える