45 lines
900 B
Text
45 lines
900 B
Text
$constant true = 0FFFFH
|
|
$constant false = 0
|
|
|
|
function half(n = integer) = integer
|
|
end = n / 2
|
|
|
|
function twice(n = integer) = integer
|
|
end = n + n
|
|
|
|
rem - return true (-1) if n is even, otherwise false
|
|
function even(n = integer) = integer
|
|
var one = integer
|
|
one = 1 rem - only variables are compared bitwise
|
|
end = ((n and one) = 0)
|
|
|
|
rem - return i * j, optionally showing steps
|
|
function ethiopian(i, j, show = integer) = integer
|
|
var p = integer
|
|
p = 0
|
|
while i >= 1 do
|
|
begin
|
|
if even(i) then
|
|
begin
|
|
if show then print i;" ---";j
|
|
end
|
|
else
|
|
begin
|
|
if show then print i;" ";j;"+"
|
|
p = p + j
|
|
end
|
|
i = half(i)
|
|
j = twice(j)
|
|
end
|
|
if show then
|
|
begin
|
|
print "----------"
|
|
print " =";
|
|
end
|
|
end = p
|
|
|
|
rem - exercise the function
|
|
print "Multiplying 17 times 34"
|
|
print ethiopian(17,34,true)
|
|
|
|
end
|