Higher-order functions: Difference between revisions

Content deleted Content added
Line 1,189:
 
computeit2(@exp, "sin", pi/3)</lang>
 
=={{header|ooRexx}}==
routines are first class ooRexx objects that can be passed to other routines or methods and invoked.
<lang ooRexx>
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
 
</lang>
 
=={{header|Oz}}==