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>
我是 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>