Parrot でのクロージャ
:outer で環境を指定した sub を .const 'Sub' でつかまえて newclosure する。
他のネームスペースの sub をつかまえるときは find_name を使う。
.sub main
$P0 = make_closure(10)
$P1 = make_closure(100)
$P0() # 11
$P1() # 101
$P0() # 12
$P1() # 102
.end
.sub make_closure
.param pmc n
.lex 'n', n
.const 'Sub' foo_sub = "foo"
$P1 = newclosure foo_sub
.return($P1)
.end
.sub foo :outer(make_closure)
$P0 = find_lex 'n'
$P0 += 1
say $P0
.end