一千萬個為什麽

搜索

Prolog程序,用於查找列表中的最小值和下一個最小值

我想創建一個prolog程序,以便它可以搜索列表中的最小數字,當用戶要求更多解決方案時(使用;符號),程序將返回下一個最小數字。如果用戶要求另一個解決方案,則返回下一個號碼,依此類推。我創建了最小謂詞,但無法回溯以獲得更多結果,請幫忙。

提前致謝。

P.S我正在使用Swi-prolog

最佳答案

我們根據 list_minnum/2 定義 list_nextmin_gt/3 ,< a href =“https://stackoverflow.com/a/29963476/4609915”> tfilter/3<�代碼> DIF/3 </代碼> :在

list_nextmin_gt(Zs0, M, Zs) :-
   list_minnum(Zs0, M0),
   tfilter(dif(M0), Zs0, Zs1),
   (  M0 = M, 
      Zs = Zs1
   ;  list_nextmin_gt(Zs1, M, Zs)
   ).

示例查詢:

?- list_nextmin_gt([3,2,1,2,3], M, Rest).
(  M = 1, Rest = [3,2,2,3]
;  M = 2, Rest = [3,3]
;  M = 3, Rest = []
;  false
).

或者,如果您不關心剩余的列表項,只需寫:

?- list_nextmin_gt([3,2,1,2,3], M, _).
(  M = 1
;  M = 2
;  M = 3
;  false
).

轉載註明原文: Prolog程序,用於查找列表中的最小值和下一個最小值