3

我是函数式编程语言的新手,我不明白为什么在 Erlang 中,如果我采用 BubbleSort、QuickSort 或任何其他排序算法并尝试排序 [8],它将返回“\b”。或者 [12,10,11] 将返回 "\n\v\f"。有人可以帮帮我吗?

4

3 回答 3

7

这是因为它们的含义相同:ASCII 中的 8 是“\b”。见“清单!” 部分在这里

仅当其中至少一个不能代表字母时,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
于 2012-08-21T00:57:40.640 回答
6

这是因为 Erlang 将字符串表示为数字列表。当打印这样一个列表时,Erlang 输出函数将查看您的列表是否包含所有对应于 ASCII 字符值的数字。如果是这样,那么它将您的列表打印为字符串。

听起来您的代码工作正常。尝试使用现有代码进行排序[12345, 29348, 978],看看会发生什么。

有关这方面的信息,请参阅参考手册第 2.11 节字符串

于 2012-08-21T00:54:30.907 回答
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).

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

于 2017-04-26T11:17:56.060 回答