На
http://www.jsoftware.com/jwiki/Guides/Lexical_Closure обсуждение по созданию замыканий в J. В итоге там уже давно сошлись на том, что а)замыкания не нужны, б)реализовать замыкания можно, используя объекты.
Вот решение Олега Кобченко и Криса Бурка:
acc =: 1 : 0
a=. cocreate''
n__a=: m
a&(4 : 'n__x=: n__x + y')
)
f=. 3 acc
f 0 NB. => 3
f 2 NB. => 5
Воспользовавшись союзом вместо наречия, из сумматора Кобченко можно получить более/менее универсальное замыкание:
closure =: 2 : 0
a=. cocreate''
z__a=: m
a&(4 : v)
)
f2 =. 3 closure 'z__x =: z__x + y'
f2 0 NB. => 3
f2 2 NB. => 5
А если на практике попробовать такие замыкания, то кроме некоторого неудобства в использовании выяснится, что в скорости решение с замыканием проигрывает 3 порядка решению, замыкания не использующему..