2012年1月14日土曜日

Erlang 配列による線形探索


アルゴリズムの勉強で線形探索をやっている。
cで作ったけど、Erlangでも作ってみた。
ソースを記載しておく。

こういったものはGitHubに置くべきだと思う。今セッティング中...

【ソース】
----- ここから -----
%% -------------
%% linear_search of array
%% -------------

-module(linear_search).
-export([search2_2_1/2]).
-ifdef(test).
-include_lib("eunit/include/eunit.hrl").
-endif.

% 表の線形探索
% @spec search2_2_1(Array,Target) -> {true,pos} | false
search2_2_1(Array,Target) ->
        i_search2_2_1(Array,Target,0).

% @spec i_search2_2_1(Array,Target,Index) ->{true,pos} | false
i_search2_2_1(Array,Target,Index) when Index < size(Array) ->
        X = array:get(Index,Array),
        if
               X =:= Target -> {true,Index};
               true -> i_search2_2_1(Array,Target,Index + 1)
       end;
i_search2_2_1(Array,Target,Index) when Index >= size(Array) ->
        false.

-ifdef(test).
-define(FUNC(X,Y),search2_2_1(X,Y)).
-define(AL(),(array:from_list( [1,3,4] ))).
m1_test() -> ?FUNC(?AL(),1) =:= 0.
m2_test() -> ?FUNC(?AL(),3) =:= 1.
m3_test() -> ?FUNC(?AL(),4) =:= 2.
m4_test() -> ?FUNC(?AL(),2) =:= false.
-endif.
----- ここまで -----
次は、2分探索をErlangで書いてみたい。