prolog问题使用否定运算符查找最大值\+
我得到了一些值H,我想用\+,找到最大值,我该怎么做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是 事实的数量。但最大值可以是 下定决心。所
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
线程本地
致以最诚挚的问候参见以下问题/答案:
另请参见以下问题/答案:
请在反斜杠之前放置一个反斜杠,使其成为可见的反斜杠。仅当未标记为代码时才需要。的可能副本请在反斜杠之前放置一个反斜杠,使其成为可见的反斜杠。仅当未标记为代码时才需要。的可能副本