erlang - 在 运行 快速排序后是否可以输出列表长度?

erlang - is it possible to output the list length after having it run a quicksort?

我是 Erlang 的新手。我一直在 运行 对随机数字列表进行快速排序(我也让它只保留唯一数字,因此重复项不会出现在排序列表中)。它工作正常,因为输出给出了没有重复的排序数字,但我一直试图让它不仅输出列表,还输出长度列表,这是我 运行 出错的地方.

length(mod:func). 将在 erlang shell 中给出列表的长度没有问题,但是在快速排序的递归之后我无法让它工作。我尝试过分配变量并执行 lists:append。我只是不知道我做错了什么。

谁能解释一下?

抱歉,我忘了附上下面的代码。这是基本的快速排序。

-module(list).
-export([sort/0]).
-export([sort/1]).

sort() -> sort([3,3,3,4,1,2,3,2,6,5,9,11,3,10,5]).

sort([]) -> [];

sort([Pivot|Tail]) ->  

    sort([ X || X <- Tail, X < Pivot]) ++

    [Pivot] ++

    sort([ X || X <- Tail, X > Pivot]).

当我运行它在shell的时候,目录是好的。如果我 运行 长度函数,它会给出我想要的 9。

55> c(list).    
{ok,list}
56> list:sort().
[1,2,3,4,5,6,9,10,11]
57> length(list:sort()).
9

但我试图让它只执行 list:sort(),然后立即给出列表和列表的长度。我尝试了很多不同的东西,我也试着查找它,但似乎无法找到如何将两者结合在一个模块中以协同工作。看起来 BIF 的长度是非常简单的函数,我只是 using/going 不是正确的方法。那有意义吗?

我希望它说类似的话:

55> c(list).    
{ok,list}
56> list:sort().
[1,2,3,4,5,6,9,10,11]
The length of the list is 9

您可以使用io:format/2打印出列表长度。只需要修改您的 sort/0 函数以为其添加一行:

 sort() -> 
     Sorted = sort([3,3,3,4,1,2,3,2,6,5,9,11,3,10,5]),
     io:format("~p~nThe length of the list is ~w~n", [Sorted, length(Sorted)]).
1> S = fun S([]) -> {[],0};                 
1> S([P|T]) ->                              
1> {Small,LSmall} = S([X || X <- T, X < P]),
1> {Big,LBig}= S([X || X <- T, X > P]),     
1> {Small ++ [P] ++ Big, LSmall+LBig+1}     
1> end.                                     
#Fun<erl_eval.30.52032458>
2> S([3,3,3,4,1,2,3,2,6,5,9,11,3,10,5]).
{[1,2,3,4,5,6,9,10,11],9}
3>