 <p>With <a href="http://www.rebol.com/docs/words/wbind.html" rel="nofollow">bind</a>, that Binds words to a specified context (in this case local context of function), and <a href="http://www.rebol.com/docs/words/wcompose.html" rel="nofollow">compose</a> function, I get: </p> <pre><code>cascade: func [ times template start ] [ use [?1] [ ?1: start template: compose [?1: (template)] loop times bind template '?1 ?1 ] ] cascade 8 [?1 * 2] 1 == 256 cascade 3 [add 4 ?1] 5 == 17 val: 4 cascade 3 [add val ?1] 5 == 17 cascade2: func [ times template1 start1 template2 start2 /local **temp** ] [ use [?1 ?2] [ ; to bind only ?1 and ?2 and to avoid variable capture ?1: start1 ?2: start2 loop times bind compose [**temp**: (template1) ?2: (template2) ?1: **temp**] '?1 ?1 ] ] cascade2 5 [?1 * ?2] 1 [?2 + 1] 1 == 120 cascade2 5 [?1 + ?2] 1 [?1] 0 == 8 </code></pre>