Special code for (<.@:) and (>.@:) appears to be invoked by setting jt->xmode to XMFLR or XMCEIL, after which the function on the right can test for these and respond appropriately. So there's no master list of which functions have special code for floor and ceiling. It seems that the optimization then relies on (<.) or (>.) not doing anything for integer arguments, although I'm having trouble tracing through all the code that makes these operations work.
Marshall On Wed, Jan 20, 2016 at 05:40:03PM -0500, Henry Rich wrote: > The experiment you made is insufficient for the purpose. > > Usually when u@:v is fast, ([: u v) gets the same treatment. Since > /:@:/: is fast, I expected ([: /: /:) to be also. (It's not, > surprisingly). > > /:@:/: is handled same as /:@/: since they are equivalent. > > <.@% is fast, but there is no reason to expect ([: <. %~) to be > fast, for two reasons: > > 1. They have different rank. But <.@:% is also fast, so it turns > out this is not the difference. > > 2. Since <.@:% is fast, so will <.@:%~ be, and normally ([: <. %) > too; but ([: <. %~) is totally different. It is equivalent to > <.@:(%~) which is NOT fast. > > I have not been able to figure out what the verbs f are for which > <.@f is fast. > > Henry Rich > > On 1/20/2016 8:31 AM, 'Pascal Jasmin' via Programming wrote: > >>does [:/:/: not also benefit from special code? > >I doubt it does, > > > >timespacex '123 ([: <. %~) 210293810238120398120398120398x + i.1000' > >0.00241248 1.27885e6 > >timespacex '123 ( <.@%~) 210293810238120398120398120398x + i.1000' > >0.000590399 836992 > > > > > >----- Original Message ----- > >From: Mike Day <[email protected]> > >To: [email protected] > >Sent: Wednesday, January 20, 2016 7:50 AM > >Subject: Re: [Jprogramming] A Different Less? > > > >I wasn't advocating /:/: . I prefer using @ but the 13 : ' .... ' > >had produced [:/:/: . Conicidentally, Linda appears to > >favour the [:u v idiom to u@v . > > > >So, for Linda's benefit, does [:/:/: not also benefit from > >special code? > > > >Mike > > > >On 20/01/2016 12:29, Henry Rich wrote: > >>Note: /:@/: y is better than /: /: y (special code) > >> > >>Henry Rich > >> > >>On 1/20/2016 5:45 AM, Mike Day wrote: > >>>Maybe simpler but it requires evaluation of /:/:y twice, whereas > >>>Raul's oc manages to make rank the right hand argument to (] - {) . > >>> > >>>This tacitisation might be what you're looking for: > >>> 13 :'r-(i.~ y){ r =./:/:y' > >>> > >>>i.~ (] - {) [: /: /: > >>> > >>> > >>>It reproduces oc except for using [: rather than @ ! > >>> > >>>Mike > >>> > >>>On 20/01/2016 10:27, Linda A Alvord wrote: > >>>>A simpler f: > >>>> > >>>>f=: 13 :'(/:/:y)-(i.~ y){/:/:y' > >>>> f > >>>>([: /: /:) - i.~ { [: /: /: > >>>> > >>>>Linda > >>>>-----Original Message----- > >>>>From: Programming [mailto:[email protected]] > >>>>On Behalf Of Linda A Alvord > >>>>Sent: Wednesday, January 20, 2016 3:15 AM > >>>>To: [email protected] > >>>>Subject: Re: [Jprogramming] A Different Less? > >>>> > >>>>Here's another way to write the code that so far is the fastest. How > >>>>does it compare? > >>>> > >>>>A=:'abcabbe' > >>>>B=:'babe' > >>>>f=: 13 :'(/:/:y)-(y i. y){/:/:y' > >>>>g=: 13 :'((f x)>: (( ~.y)i.x){(#/.~y),0: y)#x' > >>>>A g B > >>>>cab > >>>> f > >>>>([: /: /:) - i.~ { [: /: /: > >>>> g > >>>>[ #~ ([: f [) >: ([ i.~ [: ~. ]) { ([: #/.~ ]) , [: 0: ] > >>>> > >>>>Linda > >>>> > >>>>-----Original Message----- > >>>>From: Programming [mailto:[email protected]] > >>>>On Behalf Of Raul Miller > >>>>Sent: Monday, January 18, 2016 12:51 PM > >>>>To: Programming forum > >>>>Subject: Re: [Jprogramming] A Different Less? > >>>> > >>>>Hmm... > >>>> > >>>>A bugfixed version of my previous implementation (it broke when x -. > >>>>y was empty) performs approximately the same, for me: > >>>> > >>>>cle=: ,~ #~ i.@#@,~ e. [: ; (2*#/.~@]) (}.&.>~ #@[ {. ])~ (]i.,~) > >>>></. i.@#@,~ > >>>> > >>>>I say approximately, because timing variations mean that when I test > >>>>on the same data, sometimes it's faster and sometimes it's slower than > >>>> > >>>> oc=: i.~ (] - {) /:@/: > >>>> cless =: [ #~ oc@:[ >: (i.~~.) { (#/.~,0:)@] > >>>> > >>>>That said, Boss's implementation is clearly more concise... > >>>> > >>>>Thanks, > >>>> > >>>>-- > >>>>Raul > >>>> > >>>> > >>>> > >>>>On Mon, Jan 18, 2016 at 12:17 PM, Marshall Lochbaum > >>>><[email protected]> wrote: > >>>>>That's a very cool solution, and much quicker than the one based on > >>>>>progressive index-of. Instead of taking the occurrence count of both x > >>>>>and y, it just takes the count for x and compares it to the total > >>>>>number of occurrences in y, given by (#/.~). > >>>>> > >>>>>Here's a comparison of the two methods. It turns out in the version > >>>>>based on progressive index-of, the desired verb can be obtained just > >>>>>from replacing (i.) with (-.) and then using the first column of the > >>>>>result to select from x, so I've used that version. > >>>>> > >>>>> NB. Shared verb for occurrence count > >>>>> oc=: i.~ (] - {) /:@/: > >>>>> NB. Simplified form of what Roger and I posted > >>>>> cless1 =: [ {~ [: {."1 #@[ ({. -.&(,.oc) }.) [ i. , > >>>>> NB. Tacitized R.E. Boss solution > >>>>> cless2 =: [ #~ oc@:[ >: (i.~~.) { (#/.~,0:)@] > >>>>> > >>>>> NB. test data > >>>>> 'a b' =. 500 ({.;~}.) +&(1e5 ?@$ 26)&.(a.&i.) 'a' > >>>>> 10 (6!:2) 'a cless1 b' > >>>>>0.0178952 > >>>>> 10 (6!:2) 'a cless2 b' > >>>>>0.0063745 > >>>>> a (cless1 -: cless2) b > >>>>>1 > >>>>> > >>>>>To summarize, here's the fastest solution so far: > >>>>> oc=: i.~ (] - {) /:@/: > >>>>> cless =: [ #~ oc@:[ >: (i.~~.) { (#/.~,0:)@] > >>>>> > >>>>>Marshall > >>>>> > >>>>>On Mon, Jan 18, 2016 at 03:49:46PM +0000, R.E. Boss wrote: > >>>>>>I'm getting old, but still remember my solution, improved by Hui: > >>>>>> > >>>>>>http://www.jsoftware.com/pipermail/general/2004-May/017503.html > >>>>>> > >>>>>> 'abcabbe' strikeb2 'babe' > >>>>>>cab > >>>>>> > >>>>>>Curious how it performs compared to the other solutions. > >>>>>> > >>>>>> > >>>>>>R.E. Boss > >>>>>> > >>>>>> > >>>>>>>-----Original Message----- > >>>>>>>From: Programming [mailto:[email protected]] > >>>>>>>On Behalf Of June Kim (???) > >>>>>>>Sent: maandag 18 januari 2016 5:19 > >>>>>>>To: Programming forum <[email protected]> > >>>>>>>Subject: [Jprogramming] A Different Less? > >>>>>>> > >>>>>>>Hello > >>>>>>> > >>>>>>>I am looking for a verb(cless) that does something similar to > >>>>>>>Less(-.) but counting the elimination, for example: > >>>>>>> > >>>>>>> 'abcabbe' -. 'abbe' > >>>>>>> > >>>>>>>c > >>>>>>> > >>>>>>> 'abcabbe' cless 'babe' NB. get rid of y letters counting the > >>>>>>>occurrences > >>>>>>> > >>>>>>>'cab' > >>>>>>> > >>>>>>> > >>>>>>>It is easier to define such a verb recursively: 'abcabbe' cless > >>>>>>>'babe' > >>>>>>>equald to 'e' cless~ 'b' cless~ 'a' cless~ 'b' cless~ 'abcabbe' > >>>>>>> > >>>>>>> > >>>>>>>I think recursive definition isn't a usual J-ic approach. > >>>>>>> > >>>>>>> > >>>>>>>How would you implement such a verb elegantly(with which I mean > >>>>>>>short)? > >>>>>>> > >>>>>>> > >>>>>>>June > >>>>>>>------------------------------------------------------------------- > >>>>>>>--- 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 > >>>> > >>>>---------------------------------------------------------------------- > >>>>For information about J forums see http://www.jsoftware.com/forums.htm > >>>> > >>>>---------------------------------------------------------------------- > >>>>For information about J forums see http://www.jsoftware.com/forums.htm > >>> > >>>--- > >>>This email has been checked for viruses by Avast antivirus software. > >>>https://www.avast.com/antivirus > >>>---------------------------------------------------------------------- > >>>For information about J forums see http://www.jsoftware.com/forums.htm > >>---------------------------------------------------------------------- > >>For information about J forums see http://www.jsoftware.com/forums.htm > > > >--- > >This email has been checked for viruses by Avast antivirus software. > >https://www.avast.com/antivirus > > > >---------------------------------------------------------------------- > >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
