замыкание в J

Aug 02, 2008 17:15

На 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 порядка решению, замыкания не использующему..

j

Previous post Next post
Up