Ethiopian multiplication: Difference between revisions
Content added Content deleted
(added factor implemenation) |
(Added Oz example.) |
||
Line 1,060: | Line 1,060: | ||
disp(ethiopicmult(17, 34, true))</lang> |
disp(ethiopicmult(17, 34, true))</lang> |
||
=={{header|Oz}}== |
|||
<lang oz>declare |
|||
fun {Halve X} X div 2 end |
|||
fun {Double X} X * 2 end |
|||
fun {Even X} {Abs X mod 2} == 0 end %% standard function: Int.isEven |
|||
fun {EthiopicMult X Y} |
|||
X >= 0 = true %% assert: X must not be negative |
|||
Rows = for |
|||
L in X;L>0;{Halve L} |
|||
R in Y;true;{Double R} |
|||
collect:C |
|||
do |
|||
{C L#R} |
|||
end |
|||
OddRows = {Filter Rows fun {$ L#_} {Not {Even L}} end} |
|||
in |
|||
{FoldL OddRows fun {$ Z _#R} Z+R end 0} |
|||
end |
|||
in |
|||
{Show {EthiopicMult 17 34}}</lang> |
|||
=={{header|Perl}}== |
=={{header|Perl}}== |