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