为了熟悉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].

我唯一的问题是:“ |”是什么意思符号表示在列表项之间?

谢谢你们!

最佳答案

列表可以有两种形式:要么为空([]),要么为头和尾([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]

因此,如果您看到类似的内容,则可能以某种方式创建了一个列表,该列表的尾部不是正确的列表。

关于list - Erlang List串联,奇怪的“|”标志,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10969447/

10-08 22:38