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).
答案 0 :(得分:1)
你需要这样称呼它:
bubblesort(SortList, NewSortList)
由于您将相同的列表作为输入和输出,因此swap([X,Y |List], [Y,X|List])
规则永远不会匹配任何内容。
编辑:此外,交换谓词可能缺少结束条款swap([], []).
编辑2:第二眼看,它不是。如果swap
谓词没有交换任何内容,它将故意失败,以便bubblesort
可以继续bubblesort(SortList, SortList).
clausule而不会陷入无限递归。我不确定这是优雅还是丑陋的代码设计。
答案 1 :(得分:-1)
我知道了,它将是InputList而不是inputList。