Ethiopian multiplication: Difference between revisions

Content added Content deleted
(Clojure comes BEFORE Coldfusion :-) .)
(Lua comes BEFORE Metafont :-) .(What does this say about the average RC'er?))
Line 1,060: Line 1,060:
[output eproduct halve :x double :y] ~
[output eproduct halve :x double :y] ~
[output :y + eproduct halve :x double :y]
[output :y + eproduct halve :x double :y]
end</lang>

=={{header|Metafont}}==
Implemented without the ''tutor''.
<lang metafont>vardef halve(expr x) = floor(x/2) enddef;
vardef double(expr x) = x*2 enddef;
vardef iseven(expr x) = if (x mod 2) = 0: true else: false fi enddef;

primarydef a ethiopicmult b =
begingroup
save r_, plier_, plicand_;
plier_ := a; plicand_ := b;
r_ := 0;
forever: exitif plier_ < 1;
if not iseven(plier_): r_ := r_ + plicand_; fi
plier_ := halve(plier_);
plicand_ := double(plicand_);
endfor
r_
endgroup
enddef;

show( (17 ethiopicmult 34) );
end</lang>
end</lang>


Line 1,114: Line 1,091:


print(ethiopian(17, 34))</lang>
print(ethiopian(17, 34))</lang>

=={{header|Metafont}}==
Implemented without the ''tutor''.
<lang metafont>vardef halve(expr x) = floor(x/2) enddef;
vardef double(expr x) = x*2 enddef;
vardef iseven(expr x) = if (x mod 2) = 0: true else: false fi enddef;

primarydef a ethiopicmult b =
begingroup
save r_, plier_, plicand_;
plier_ := a; plicand_ := b;
r_ := 0;
forever: exitif plier_ < 1;
if not iseven(plier_): r_ := r_ + plicand_; fi
plier_ := halve(plier_);
plicand_ := double(plicand_);
endfor
r_
endgroup
enddef;

show( (17 ethiopicmult 34) );
end</lang>


=={{header|MATLAB}}==
=={{header|MATLAB}}==