【发布时间】:2021-10-14 21:35:34
【问题描述】:
我有一个任务是在 Prolog 中实现快速排序,然后返回最后一个元素。我有快速排序工作,但是当它到达最后一个元素调用时,它会返回整个列表。我的最后一个元素在单独运行时有效,但在我在快速排序结束时调用它时无效。关于我需要改变什么的任何想法?
quicksort([],[]).
quicksort([H|T],Final) :-
partition(T,H,Left,Right),
quicksort(Left,Ls),
quicksort(Right,Rs),
append(Ls,[H|Rs],Sorted),
lastelement(Final, [Sorted]).
partition([],Pivot,[],[]).
partition([H|T],Pivot,[H|Ls],Rs) :- H =< Pivot, partition(T,Pivot,Ls,Rs).
partition([H|T],Pivot,Ls,[H|Rs]) :- H > Pivot, partition(T,Pivot,Ls,Rs).
append([],Sorted,Sorted).
append([H|T],Sorted,[H|Z]) :- append(T,Sorted,Z).
lastelement(Final, [Final]).
lastelement(Final, [_|T]):- lastelement(Final,T).
【问题讨论】:
-
去掉调用
lastelement(Final, [Sorted])的括号 -
我试过了,但它返回 false
-
那么在调用lastelement之前你可能还有另一个问题。您确定您从通话中删除了括号吗?它应该是
lastelement(Final, Sorted) -
是的,我删除了方括号,所以它的读取方式与此完全相同,但返回 false。
-
那么你应该检查你程序的其他部分。 quicksort 的第二个参数是第一个子句的列表和第二个子句的项目。我认为您将作业的两个部分混合在一起。首先计算快速排序,它应该有一个列表作为第二个参数。然后调用lastelement获取最后一个元素
标签: prolog