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

erlang-运行快速排序后是否可以输出列表长度?,erlang,quicksort,Erlang,Quicksort,我是Erlang的新手。我一直在对随机数字列表进行快速排序(我还让它只保留唯一的数字,这样重复的数字就不会出现在排序列表中)。它的工作原理很好,输出的是没有重复的排序数字,但我一直试图让它不仅输出列表,而且输出长度列表,这也是我遇到错误的地方 length(mod:func)。在erlang shell中给出列表的长度没有问题,但是在快速排序的递归之后,我无法让它工作。我尝试分配变量并执行列表:append。我只是不知道我做错了什么 有人能解释一下吗 对不起,我忘了附上下面的代码。这是基本的快速

我是Erlang的新手。我一直在对随机数字列表进行快速排序(我还让它只保留唯一的数字,这样重复的数字就不会出现在排序列表中)。它的工作原理很好,输出的是没有重复的排序数字,但我一直试图让它不仅输出列表,而且输出长度列表,这也是我遇到错误的地方

length(mod:func)。
在erlang shell中给出列表的长度没有问题,但是在快速排序的递归之后,我无法让它工作。我尝试分配变量并执行
列表: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]).
但我试图让它只执行
list:sort()
,然后给出列表和列表的长度。我尝试了很多不同的方法,我试着去查找,但似乎找不到如何将这两种方法结合在一个模块中一起工作。看起来长度BIF是一个非常直接的函数,我只是没有正确地使用它。这有意义吗

我希望它能这样说:

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

您可以使用打印列表长度。只需修改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=funs([])->{[],0};
1> S([P|T])->
1> {Small,LSmall}=S([X|X{Big,LBig}=S([X|X P]),
1> {Small++[P]++Big,LSmall+LBig+1}
1> 结束。
#乐趣
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>

请发布您编写的代码以及当前和预期的输出。对不起,我忘了这么做。我在上面编辑了它。好的。但这不会给出特定列表的长度。我不仅尝试排序,更具体地说,我只想有一个唯一值的列表。所以我想要唯一值列表的长度。因此,我的example,我希望长度输出为9。但是上面的on不是长度为15吗?快速排序的结果将被分配到第一行的
排序
,因此它将具有所需列表的值和长度。@chitown88,但是上面的on不是长度为15吗?-不。答案只是在第一行添加一个变量您的sort/0函数中的一个,该变量存储sort/1函数的结果。然后,答案在sort/0函数中添加了第二行,该行将打印出存储在排序变量中的列表的长度……但为什么您不能自己尝试验证长度是否为9而不是15?@7stud,我在添加了co之后立即尝试了它我意识到并意识到了这一点。我以前应该检查并试用它。我对所有这一切和学习都还是新手。但我非常感谢你的解释。我需要这些解释来遵循逻辑并在头脑中理解它。@chitown88如果我理解正确,你希望传入一个列表作为一个参数,然后仍然得到结果,r好吗?如果是这样的话,我会把你的
sort/1
重命名为
qsort/1
,因为这是你正在使用的内部函数。然后,把你当前的
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>