Ethiopian multiplication: Difference between revisions

m (Adding MUMPS example)
Line 659:
 
=={{header|Erlang}}==
<lang erlang>-module(ethiopian_multiplicationethopian).
{{incorrect|Erlang|Need to define and use three functions as stated in the task description}}
<lang erlang>-module(ethiopian_multiplication).
-export([multiply/2]).
 
halve(N) ->
multiply(Lhs, Rhs) when is_integer(Lhs) and Lhs > 0 and
N div 2.
 
double(N) ->
N * 2.
 
even(N) ->
(N rem 2) == 0.
 
multiply(LhsLHS, RhsRHS) when is_integer(Lhs) and Lhs > 0 and
is_integer(Rhs) and Rhs > 0 ->
mmultiply(LhsLHS, RhsRHS,0).
 
mmultiply(1, RhsRHS,Acc) -> Rhs;
RHS+Acc;
m(Lhs, Rhs) when 1 == (Lhs band 1) -> Rhs + m(Lhs bsr 1, Rhs bsl 1);
multiply(LHS,RHS,Acc) ->
m(Lhs, Rhs) -> m(Lhs bsr 1, Rhs bsl 1).</lang>
case even(LHS) of
true ->
multiply(halve(LHS),double(RHS),Acc);
false ->
multiply(halve(LHS),double(RHS),Acc+RHS)
end.
</lang>
 
=={{header|Factor}}==
Anonymous user