読者です 読者をやめる 読者になる 読者になる

Keep on moving

あんまりまとまってないことを書きますよ

Erlang Super liteの予習(Chap3 ex3.6)

Erlang

id:t-fridgeさんがマージソート@Erlangを書いていてかなり面白そうなので自分も書いてみた。
Erlangでmerge sortを作ってみる練習 - Keep it in the fridge
実は問題3.6でマージソートを書くのでかなり参考になりました。

Erlang Programming

Erlang Programming

ソース

%% Author: Ehren
%% Created: 2009/11/11
%% Description: TODO: Add description to sort
-module(sort).

%%
%% Include files
%%
-include_lib("eunit/include/eunit.hrl").
%%
%% Exported Functions
%%
-export([my_mergesort/1]).

%% --------------------------------------------------------------------
%% Test Functions
%% --------------------------------------------------------------------

my_mergesort_test_() ->
	[
		?_assertEqual(my_mergesort([1,3,2]),[1,2,3]),
		?_assertEqual(my_mergesort([3,2,0,1,5,8,4,2,2,7]),[0,1,2,2,2,3,4,5,7,8])
	].

%% --------------------------------------------------------------------
%% Func: my_mergesort/1
%% Returns: mergesorted list
%% --------------------------------------------------------------------

my_mergesort(L) when length(L) < 2 ->
	L;
my_mergesort(L) ->
	{Left,Right} = lists:split(length(L) div 2, L),
	lists:merge(my_mergesort(Left), my_mergesort(Right)).

今後の勉強予定

listsのbifはいろいろあって便利。でも車輪の再発明でもいいから、listsモジュールの各メソッドを
自分で書いてもかなり勉強になりそうですね。