我想在Prolog中使用最後一個元素作爲主軸來實現Quicksort,但不知何故我的謂詞進入了一個無限循環。我使用累加器來確定到目前爲止排序的部分(最後應該與它應該查找的排序列表S相同)。序言:使用最後一個元素作爲主軸的快速排序(無限循環)
quicksort([], S, S).
quicksort(L, S, A) :-
lastElement(L, P), /*last element P as pivot*/
split(L, P, Greater, Smaller), /* splits L into set Greater (than) and Smaller (than) by pivot P */
quicksort(Greater, Greater_S, A), /* require Greater to be sorted as well, calling this Greater_S */
quicksort(Smaller, S, [P|Greater_S]). /* same for Smaller, but accumulator should already have P and Greater_S sorted -> [P|Greater_S] as accumulator */
quicksort(L, S) :-
quicksort(L, S, []).
不知何故在quicksort(G, G_S, A)
,列表G_S
似乎具有相同的元件在尺寸上增加迭代,即[X, X, X, X, ...]
。
我在做什麼錯?
如果有人能幫助我,那將是非常感謝!
在此先感謝。
編輯:謂詞split/4
和lastElement/2
的說明:下面
lastElement([X], X).
lastElement([_|T], X) :- lastElement(T, X).
split([], _, [], []).
split([H|T], P, G, K) :-
H > P,
G = [H|T_],
split(T, P, T_, K).
split([H|T], P, G, K) :-
H =< P,
K = [H|T_],
split(T, P, G, T_).
重命名你的一個S變量。 – vmg
你還記得在'deel/4'的第一個參數中的最後一個元素將pivot作爲最後一個元素,對吧?無論如何,這個累加器究竟是什麼? – 2017-04-12 21:08:29
添加'lastElement/2'和'deel/4'的定義! – false