我想創建一個prolog程序,以便它可以搜索列表中的最小數量,並且當用戶請求更多解決方案(使用;符號)程序返回下一個最小數字。如果用戶請求另一個解決方案,它將返回下一個號碼,依此類推。我已經創建了最小謂詞,但無法使其回溯以獲得更多結果,請幫助。Prolog程序找到列表中的最小值和下一個最小值
在此先感謝。
PS我使用的束縛水飽和度,序言
我想創建一個prolog程序,以便它可以搜索列表中的最小數量,並且當用戶請求更多解決方案(使用;符號)程序返回下一個最小數字。如果用戶請求另一個解決方案,它將返回下一個號碼,依此類推。我已經創建了最小謂詞,但無法使其回溯以獲得更多結果,請幫助。Prolog程序找到列表中的最小值和下一個最小值
在此先感謝。
PS我使用的束縛水飽和度,序言
簡單得不能再簡單的解決方案:對列表進行排序,並返回該列表中的每個成員:
min(List, Min) :-
sort(List, Sorted),
member(Min, Sorted).
我們基於list_minnum/2
,tfilter/3
和dif/3
定義list_nextmin_gt/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
).
@false。或者應該是「(」「)。」去呢? – repeat 2015-12-09 15:39:22
太。它沒有幫助:這種方式沒有被提及。所以你需要一個額外的參考提及謂詞指標。 – false 2015-12-09 15:46:22
@false。 '(;)/ 2'的形式?我想知道'一個; b;假'與'(a; b; c)'有什麼不同?...... ......''如何?: - M = 1; M = 2; M = 3;假。「作爲答案? – repeat 2015-12-09 17:50:22