RosettaCodeData/Task/Apply-a-callback-to-an-array/REXX/apply-a-callback-to-an-array.rexx
2023-07-01 13:44:08 -04:00

23 lines
2.3 KiB
Rexx

/*REXX program applies a callback to an array (using factorials for a demonstration).*/
numeric digits 100 /*be able to display some huge numbers.*/
parse arg # . /*obtain an optional value from the CL.*/
a.= /*initialize the array A to all nulls*/
if #=='' | #=="," then #= 12 /*Not assigned? Then use default value*/
do j=0 to #; a.j= j /*assign the integer J ───► A.j */
end /*j*/ /*array A will have N values: 0 ──► #*/
call listA 'before callback' /*display A array before the callback*/
say /*display a blank line for readability.*/
say ' ··· applying callback to array A ···' /*display what is about to happen to B.*/
say /*display a blank line for readability.*/
call bangit 'a' /*factorialize (the values) of A array.*/
/* store the results ───► array B.*/
call listA ' after callback' /*display A array after the callback.*/
exit 0 /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
bangit: do v=0; $= value(arg(1)'.'v); if $=='' then return /*No value? Then return*/
call value arg(1)'.'v, fact($) /*assign a value (a factorial) to array*/
end /*i*/
/*──────────────────────────────────────────────────────────────────────────────────────*/
fact: procedure; arg x; != 1; do f=2 to x; != !*f; end; /*f*/; return !
listA: do k=0 while a.k\==''; say arg(1) 'a.'k"=" a.k; end /*k*/; return