2010. 12. 3. 14:56

% module

-module(eulerPro2).
-export([piboSum/1]).
   
isEven(N) ->
    even(N rem 2 =:= 0).
even(false) -> odd;
even(true) -> even.

piboSum(N) ->
    piboSum({1,1},{0,N},odd).

piboSum({A,B},{Sum,N},odd) when A =< N ->
    piboSum({B,A+B},{Sum,N},isEven(B));

piboSum({A,B},{Sum,N},even) when A =< N ->
    piboSum({B,A+B},{Sum+A,N},isEven(B));

piboSum({A,_},{Sum,N},_) when A > N ->
    Sum.


          
% test
-module(eulerPro2_tests).
-include_lib("eunit/include/eunit.hrl").

piboSum_test() ->
    ?assertEqual(0, eulerPro2:piboSum(1)),
    ?assertEqual(2, eulerPro2:piboSum(2)),
    ?assertEqual(2, eulerPro2:piboSum(5)),
    ?assertEqual(10, equerPro2:piboSum(8)).

   

Posted by newpolaris