Erlang:数组排序

3

我对函数式编程语言还很陌生,不明白为什么在Erlang中,如果我使用冒泡排序、快速排序或其他排序算法来排序[8],它会返回"\b"。或者[12,10,11]将返回"\n\v\f"。请问有人可以帮助我吗?

3个回答

7
这是因为它们的含义相同:ASCII中的8是“\b”。在这里查看“lists!”部分(这里)
当列表中的数字至少有一个不能表示字母时,Erlang会将数字列表打印为仅数字! 因此,erlang shell试图通过做出最佳猜测来帮助你看到想要看到的内容。 偶尔会出现字符串而不是预期的整数列表,这可能会让人困惑。 以下是说明这一点的例子:
1> [104, 101, 108, 108, 111].
"hello"
2> [104, 101, 108, 108, 111, -1].
[104,101,108,108,111,-1]
3> [104, 101, 108, 108, 111] =:= "hello".
true

6

这是因为Erlang将字符串表示为数字列表。在打印这样的列表时,Erlang输出函数会查看您的列表是否包含所有对应于ASCII字符值的数字。如果是,则将其作为字符串打印。

听起来你的代码是正确的。尝试使用现有代码对[12345,29348,978]进行排序,看看会发生什么。

有关此信息,请参见参考手册第2.11节String


它返回了 "[978, 12345, 29348]"。 - Lívia Amaral

0
主要原因是Erlang基本上将这些作为正在打印的字符的相应ASCII值。 我想发布一段在Erlang中排序的代码:
    -module(solution).
    -import(lists,[delete/2,max/1]).
    -compile(export_all).
    selection_sort([],Sort)-> Sort;
    selection_sort(Ar,Sort)->
        M=max(Ar),
        Ad=delete(M,Ar),
        selection_sort(Ad,[M|Sort]).
    print_array([])->ok;
    print_array([H|T])->
        io:format("~p~n",[H]),
        print_array(T). 

   main()->
        Ans=selection_sort([1,5,7,8,4,10],[]),
        print_array(Ans).

希望上述代码可以解决您的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接