为什么要冒泡([8,7,6,5,4,3,2,1],L)。返回未排序的列表?

时间:2018-04-05 16:46:31

标签: prolog

bubblesort(inputList, SortList) :-
    swap(inputList, List), !,
    printlist(List),
    bubblesort(List, SortList).
bubblesort(SortList, SortList).

swap([X,Y |List], [Y,X|List]) :- X>Y.
swap([Z|List], [Z|List1]) :- swap(List,List1).

printlist([]) :- nl.
    printlist([Head|List]) :-
        write(Head), write(" "),
        printlist(List).

2 个答案:

答案 0 :(得分:1)

你需要这样称呼它:

bubblesort(SortList, NewSortList)

由于您将相同的列表作为输入和输出,因此swap([X,Y |List], [Y,X|List])规则永远不会匹配任何内容。

编辑:此外,交换谓词可能缺少结束条款swap([], []).

编辑2:第二眼看,它不是。如果swap谓词没有交换任何内容,它将故意失败,以便bubblesort可以继续bubblesort(SortList, SortList). clausule而不会陷入无限递归。我不确定这是优雅还是丑陋的代码设计。

答案 1 :(得分:-1)

我知道了,它将是InputList而不是inputList。