Meanwhile http://users.ece.utexas.edu/~adnan/pike.html
;) Thanks, -- Raul On Tue, Aug 26, 2014 at 12:42 AM, 'Pascal Jasmin' via Programming < [email protected]> wrote: > to expand on what you are saying, > > timespacex '+/`0:@.([: +./ 0 = ]) 0,~ >: i.1e5' > 0.00329024 3.28512e6 > timespacex '+`0:@.(0 = *)/ 0,~ >: i.1e5' > > 0.0532716 2.10253e6 > > the first expression sees if any item is 0, and if not, it does +/ else it > returns 0. It is 20 times faster than 2nd expression which checks if > either x or y is 0 and then returns 0 > > There is unfornately no tacit break, but generating an error can let you > call the error handler. You could look at the addler32 thread for trying > to get an intermediate value of the function up until the error, but: > > (+`(a:+])@.(0 = *))/ :: 0: 1 4 0 3 2 1 > 0 > > timespacex ' (+`(a:+])@.(0 = *))/ :: 0: 0 ,~ >: i.1e5' > 0.0021792 3.15366e6 > timespacex ' (+`(a:+])@.(0 = *))/ :: 0: 0 , >: i.1e5' > 0.0480169 3.15366e6 > > it turns out that even when the 0 is at the end, and will be the first > expression evaluated, the first approach of scanning first and then > applying full function is almost as fast. And when the 0 will be caught > last, it is just as slow as the check every element as you go approach. > > It can still be worth doing the latter approach as most functions are more > expensive than +, and it could be saving an expensive operation, but in > general, for short circuiting, if it is possible to find out where in the > data the short circuit will occur, and then just applying the function > until the short circuit, that will have the best performance. > > Still would be nice to have a tacit break. function. > > > ----- Original Message ----- > From: Raul Miller <[email protected]> > To: Programming forum <[email protected]> > Cc: > Sent: Monday, August 25, 2014 11:57:57 PM > Subject: Re: [Jprogramming] Existing a Tacit > > The best technique for avoiding work is to not specify it in the first > place. > > @. does work, of course. > > :: is another option. > > ^: is another option. > > Often, though, it's better to instead specify an operation which does the > right thing instead of "exiting early". The reason for this has to do with > the possibility that more work needs to be done elsewhere in the array. > Examples of this kind of "exiting early" include adding 0 and multiplying > by 1. > > Actually, it really depends on the kind of problem you are trying to solve. > For example, using i. or indexing could also be considered to be a data > driven "exiting early" approach. > > Usually it's best to focus on the practical issue you are trying to > address... > > Thanks, > > -- > Raul > > > > On Mon, Aug 25, 2014 at 11:34 PM, William Szuch <[email protected]> > wrote: > > > What techniques or methods can be used to exit a tacit at multiple points > > depending on the results of the data flow through the tacit ?. > > > > In an explicit this is achieved by using the control statement > "return." a > > multiple times. > > > > > > > > A simple case for one exit would be to use something like: > > > > > > > > f1`[email protected] > > > > > > > > A more generalised situation: > > > > > > > > (fn`[email protected])@:.(f2`extit1 @.t1)@: (f1`[email protected]) > > > > Regards > > > > > > > > Bill Szuch > > > > > > > > > > > > ---------------------------------------------------------------------- > > For information about J forums see http://www.jsoftware.com/forums.htm > > > > > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
