私は関数型プログラミング言語に不慣れで、ErlangでBubbleSort、QuickSort、またはその他の並べ替えアルゴリズムを使用して並べ替えを試みると[8]、「\b」が返される理由がわかりません。または、[12,10,11]は「\ n \ v\f」を返します。誰か助けてくれませんか?
3 に答える
これは、同じ意味であるためです。ASCIIの8は「\b」です。「リスト」をご覧ください。ここのセクション。
Erlangは、少なくとも1つが文字を表すことができなかった場合にのみ、数字のリストを数字として出力します。
したがって、erlangシェルは、あなたが見たいものについて最善の推測をすることによってあなたを助けようとしています。ときどき、混乱する可能性のある整数のリストを表示しようとしたときに文字列が表示されることがあります。以下にこの点を示します。
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
これは、アーランが文字列を数値のリストとして表すためです。このようなリストを印刷する場合、Erlang出力関数は、リストにASCII文字値に対応するすべての数値が含まれているかどうかを確認します。その場合、リストを文字列として出力します。
コードが正しく機能しているようです。既存のコードで並べ替え[12345, 29348, 978]
て、何が起こるかを確認してください。
これについては、リファレンスマニュアルのセクション2.11文字列を参照してください。
これの主な理由は、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).
上記のコードがあなたの問題を解決できることを願っています