Task

Write a procedure which accepts as arguments another procedure and a positive integer.

The latter procedure is executed a number of times equal to the accepted integer.




  [ stack ]                     is times.start  (     --> s   )
  protect times.start
 
  [ stack ]                     is times.count  (     --> s   )
  protect times.count
 
  [ stack ]                     is times.action (     --> s   )
  protect times.action
 
  [ ]'[ times.action put
    dup times.start put
    [ 1 - dup -1 > while
      times.count put
      times.action share do
      times.count take again ]
    drop
    times.action release
    times.start release ]       is times         (   n -->   )
 
  [ times.count share ]         is i             (     --> n )
 
  [ times.start share i 1+ - ]  is i^            (     --> n )
 
  [ 0 times.count replace ]     is conclude      (     -->   )
 
  [ times.start share
    times.count replace ]       is refresh       (     -->   )
 
  [ times.count take 1+
    swap - times.count put ]    is step          (     --> s )
 
  [ nested ' times nested 
    swap join do ]              is rosetta-times ( n x -->   )