Tacit may make something run faster but other considerations may greatly outweigh this. (I often prefer explicit formulations because I find them clearer and, very often, performance lust wastes the most important time - _my_ time)
For instance, in your example the performance penalty is because you are creating a rank 0 verb, not because one is tacit versus explicit. nopR0=: 3 : '+y'"0 NB. Rank 0 nopRI=: 3 : '+y' NB. Default (infinite) rank 6!:2 'nopR0 i.1e5' 0.305895 6!:2 'nopRI i.1e5' NB. Same time as each of the following 0.000675471 6!:2 '+"0 i. 1e5' 0.000687262 6!:2 '+ i. 1e5' 0.00067315 For larger argument: (6!:2 'nopR0 i.1e6'),(6!:2 'nopRI i.1e6'),(6!:2 '+"0 i. 1e6'),6!:2 '+ i. 1e6' 2.84852 0.0131968 0.00916575 0.0129643 Taking to heart the lesson we learned earlier today shows just how polluted these timings are: DAT=: i. 1e6 (6!:2 'nopR0 DAT'),(6!:2 'nopRI DAT'),(6!:2 '+"0 DAT'),6!:2 '+ DAT' 2.91231 0.00770098 0.00558609 0.00726959 On 11/9/07, danil osipchuk <[EMAIL PROTECTED]> wrote: > > Hello list, > > As I understand, in J you have to write tacitly to make things be fast (is > this right?). > Sometimes I would like to store and to extract intermediate results from > inside of a tacit verb, when processing large array. I believe, this may > considerably reduce complexity and execution penalty of a verb. > Unfortunately, I don't see an effective way to do this. > The idea is something like this: > > setA =: 13 : 'A=:y'"0 > 6!:2 'setA i. 1000000' > 5.63823 > setA > +----------+-+-+ > |+-+-+----+|"|0| > ||3|:|A=:y|| | | > |+-+-+----+| | | > +----------+-+-+ > ^^^No, way... > There is no tacit representation for this. Also performance is not good > due > to the parsing inside of a loop, I guess. The name lookup and the update > itself probably don't consume a lot, if compared to this: > > nop =: 3 : '+y'"0 > nop > +--------+-+-+ > |+-+-+--+|"|0| > ||3|:|+y|| | | > |+-+-+--+| | | > +--------+-+-+ > 6!:2 'nop i. 1000000' > 5.05352 > > Of course, the tacit equivalent of noop is much faster: > > 6!:2 '+"0 i. 1000000' > 0.011353 > > So, how would you deal with this? Should one really always stretch his > brain > for the pure tacit solutions without use of 'temp variables'? > > regards, > Danil > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > -- Devon McCormick, CFA ^me^ at acm. org is my preferred e-mail ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
