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

时间:2011-04-20 15:03:40

标签: prolog

我想创建一个prolog程序,以便它可以搜索列表中的最小数字,当用户要求更多解决方案时(使用;符号),程序将返回下一个最小数字。如果用户要求另一个解决方案,则返回下一个号码,依此类推。我已经创建了最小谓词,但无法让它回溯以获得更多结果,请帮忙。

提前致谢。

P.S我正在使用Swi-prolog

2 个答案:

答案 0 :(得分:2)

我们根据list_minnum/2tfilter/3dif/3定义void TreeView_TreeNodePopulate(object sender, TreeNodeEventArgs e) { // Do your code here }

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

答案 1 :(得分:0)

非常简单的解决方案:对列表进行排序并返回此列表的每个成员:

min(List, Min) :-
    sort(List, Sorted),
    member(Min, Sorted).