为了熟悉Erlang,我正在努力 写我自己的Bubblesort算法。现在,我有 我的模块中的以下代码:
-module(mysort).
-export([bubblesort/1]).
bubblesort(L) ->
sort_sequence(L, []).
sort_sequence([H1|[H2|T]], Sorted) ->
if H2 >= H1 ->
sort_sequence(T, Sorted ++ [H1, H2]);
H2 < H1 ->
sort_sequence(T, Sorted ++ [H2, H1])
end;
sort_sequence([H|T], Sorted) ->
Sorted ++ H;
sort_sequence([], Sorted) ->
Sorted.
首先:请不要向我提供我的代码建议 我想弄清楚自己^^
问题是:如果我说mysort:bubblesort([2,1,3,4,5]).
输出正如我所料:[1,2,3,4,5]
但如果我说mysort:bubblesort([2,1,3,5,4]).
输出为:[1,2,3,5|4].
我唯一的问题是:这是什么“|”在listitems之间的标志意味着什么?!
谢谢大家!
答案 0 :(得分:6)
列表可以有两种形式:它是空的([]
),或者它有头部和尾部([H|T]
)。因此[]
是一个空列表,[1 | []]
是一个头部为1且尾部为[]
的列表,[1|2]
是一个头部为1且尾部为2。
如果列表为空或其尾部是正确的列表,则列表称为正确的列表。所以[]
是一个正确的列表,因为它的空和[1|[]]
是一个正确的列表,因为它的尾部是空列表(这是一个正确的列表),但[1|2]
不是一个正确的列表,因为它的尾巴是2和2不是一个合适的列表。
由于正确的列表是最常见的列表类型,并且将它们作为嵌套列表进行读取和写入是很麻烦的,因此它们有一种特殊的语法:显示正确的列表,可以通过分隔列表的头部来编写。带逗号的子列表。因此,如果我们有正确的列表[1 | [2 | [3 | []]]]
,它将显示为[1,2,3]
(我们也可以这样写),它更具可读性。
此格式还用于显示不正确列表的开头,如果它们“开始”正确到不正确尾部的点,将用|
分隔。因此,例如,如果我们有不正确的列表[1 | [2 | [3|4]]]
(这是不正确的,因为最里面的尾部是4,这不是一个正确的列表),它将显示为[1,2,3|4]
以区别于正确的列表[1 | [2 | [ 3 | [4 | []]]]]
,显示为[1,2,3,4]
。
因此,如果您看到类似的内容,则会以某种方式创建一个列表,其尾部不是正确的列表。
答案 1 :(得分:5)
当尾部没有列出时会发生这种情况:
> [1,2,3 | 2].
[1,2,3|2]
> [1,2,3 | [2]].
[1,2,3,2]
答案 2 :(得分:1)
首先:谢谢你们!
sort_sequence([H|T], Sorted) ->
Sorted ++ H;
我将一个项目汇总到列表中,当然 不是一个合适的清单;这导致了你的错误 都解释了