【发布时间】:2017-08-19 01:43:09
【问题描述】:
我是 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 是非常简单的功能,我只是没有以正确的方式使用/处理它。那有意义吗?
我希望它这样说:
55> c(list).
{ok,list}
56> list:sort().
[1,2,3,4,5,6,9,10,11]
The length of the list is 9
【问题讨论】:
-
请发布您编写的代码以及当前和预期的输出。
-
对不起。我忘了这样做。我在上面编辑过。