我正在努力最好地理解有关此代码的所有内容。这就是我目前如何看待正在发生的事情:
所以我可以看到X > Y
我们是否交换了元素,如果不是我们递归子列表,直到我们找到X
X > Y
,如果我们没有,那么列表是排序。
我遇到的问题是我不太了解基本情况,bubblesort(Sorted, Sorted)
。我以为你需要一个空列表的基础案例?如果有人可以逐步描述这个程序,我真的很感激。
bubblesort(List,Sorted) :-
swap(List,List1),
!,
bubblesort(List1,Sorted).
bubblesort(Sorted,Sorted).
swap([X,Y|Rest],[Y,X|Rest]) :- % swaps X with Y if gt(X,Y) is true.
gt(X,Y).
swap([Z|Rest],[Z|Rest1]) :- % calls swap on sublists excluding the heads.
swap(Rest,Rest1).
gt(X,Y) :- % true if X is greater than Y.
X > Y.