いくつかの値 H を取得しました。\+ を使用して最大値を見つけたいのですが、どうすればよいですか?
maxValue(X) :-
Get(Id, X),
\+( Get(Id, Y), X < Y ).
手がかりがありません....助けてください、ありがとう!
否定を使用することは、最大値を見つける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スレッドをローカルにする必要があります。
よろしくお願いします
これらの質問/回答も参照してください。