在Prolog中查找列表的最小值和最大值
下面是我的程序。 个别地。。。。max和min函数可以工作,但是当我使用minmax组合它们时,它抛出了错误在Prolog中查找列表的最小值和最大值,prolog,Prolog,下面是我的程序。 个别地。。。。max和min函数可以工作,但是当我使用minmax组合它们时,它抛出了错误 max([H|T], M) :- max(T, H, M). max([], M, M). max([H|T], Y, M) :- H =< Y, max(T, Y, M). max([H|T], Y, M) :- H > Y, max(T, H, M). max([H | T],M):-max(T,H,M)。 最大值([],米,米)。 max([H | T],Y,
max([H|T], M) :- max(T, H, M).
max([], M, M).
max([H|T], Y, M) :- H =< Y, max(T, Y, M).
max([H|T], Y, M) :- H > Y, max(T, H, M).
max([H | T],M):-max(T,H,M)。
最大值([],米,米)。
max([H | T],Y,M):-H=Y,最大值(T,H,M)。
在此之前,max代码单独工作
min([H|T], M) :- min(T, H, M).% \+ means "not" //// min code starts
min([], M, M).
min([H|T], Y, M) :- H =< Y, min(T, H, M).
min([H|T], Y, M) :- H > Y, min(T, Y, M). /// till here min code works
minmax([H|T],[max(T,H,M),min(T,H,M)]). /// this is statetment with problem
min([H | T],M):-min(T,H,M)。%\+表示“不”////min代码开始
最小值([],M,M)。
min([H | T],Y,M):-H=Y,min(T,Y,M)。///直到这里,代码才起作用
最小最大值([H | T],[max(T,H,M),min(T,H,M)])。///这是有问题的陈述
现在@Lougler已经解决了您的错误。我在这里只是想展示library(aggregate)如何解决您的需求:
?- aggregate((min(C),max(C)),member(C,[3,6,2,6,1,9,2]),R).
R = (1, 9).
在Prolog中,谓词的行为与函数不同。因此
[max(T,H,M),min(T,H,M)]
不会将min
和max
作为函数和返回值执行。。您需要:minmax(List,Min,Max):-Min(List,Min),Max(List,Max)。