2017-04-14 154 views
0

以下是我的程序。 單獨....最大和最小功能的作品,但是當我用minmax組合它們時,它會拋出錯誤。查找Prolog中列表的最小和最大值

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). 

到這裏最大的代碼工作單獨

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 
+0

在Prolog中,謂詞並不像功能一樣。所以'[max(T,H,M),min(T,H,M)]'不會執行'min'和'max'作爲函數和返回值。您需要:'minmax(List,Min,最大值): - min(List,Min),max(List,Max).' – lurker

回答

0

現在@lurker已經解決您的錯誤。我在這裏只是爲了展示庫(集合)如何解決您的需求:

?- aggregate((min(C),max(C)),member(C,[3,6,2,6,1,9,2]),R). 
R = (1, 9).