56 lines
1.1 KiB
Rexx
56 lines
1.1 KiB
Rexx
say callit(.routines~fib, 10)
|
|
say callit(.routines~fact, 6)
|
|
say callit(.routines~square, 13)
|
|
say callit(.routines~cube, 3)
|
|
say callit(.routines~reverse, 721)
|
|
say callit(.routines~sumit, 1, 2)
|
|
say callit(.routines~sumit, 2, 4, 6, 8)
|
|
|
|
-- call the provided routine object with the provided variable number of arguments
|
|
::routine callit
|
|
use arg function
|
|
args = arg(2, 'a') -- get all arguments after the first to pass along
|
|
return function~callWith(args) -- and pass along the call
|
|
|
|
::routine cube
|
|
use arg n
|
|
return n**3
|
|
|
|
::routine square
|
|
use arg n
|
|
return n**2
|
|
|
|
::routine reverse
|
|
use arg n
|
|
return reverse(n)
|
|
|
|
::routine fact
|
|
use arg n
|
|
accum = 1
|
|
loop j = 2 to n
|
|
accum = accum * j
|
|
end
|
|
return accum
|
|
|
|
::routine sumit
|
|
use arg n
|
|
accum = 0
|
|
do i over arg(1, 'a') -- iterate over the array of args
|
|
accum += i
|
|
end
|
|
return accum
|
|
|
|
::routine fib
|
|
use arg n
|
|
if n == 0 then
|
|
return n
|
|
if n == 1 then
|
|
return n
|
|
last = 0
|
|
next = 1
|
|
loop j = 2 to n;
|
|
current = last + next
|
|
last = next
|
|
next = current
|
|
end
|
|
return current
|