Some hints to create a tacit verb:
a=.' now is the time for all good men to come to the aidof their country ' (0<-.' ' E.a)#a nowisthetimeforallgoodmentocometotheaidoftheircountry See if you can write a simple expression that gives the result you want. Then if it is monadic, simply begin name=: 13 : and enter the expression with y for the argument. Inside a set of single quotes, you must use double quotes. fun2=: 13 :'(0<-.'' ''E.y)#y' fun2 ] #~ 0 < [: -. ' ' E. ] The display of the tacit expression will have been created for you. fun2 a nowisthetimeforallgoodmentocometotheaidoftheircountry And it should work in the same way that your sample worked. Linda -----Original Message----- From: programming-boun...@jsoftware.com [mailto:programming-boun...@jsoftware.com] On Behalf Of d...@shaw.ca Sent: Wednesday, January 04, 2012 9:08 PM To: Programming forum Subject: Re: [Jprogramming] Faster deb How about using E. ? fun=:verb define s=.0< -. ' 'E.y s#y ) a=.' now is the time for all good men to come to the aid of their country ' fun a nowisthetimeforallgoodmentocometotheaidoftheircountry the result is not boxed but leading and trailing blanks are removed. The timing is, on my now obsolete machine (Athlon 64 5600+ (brisbane 65nm) and 200Mhz bus) 1000(6!:2)'fun a' 8.91696e_6 I am a novice so I am having problems putting fun into a tacit form- lots of trial and error. Essentially, I am taking an APL approach to the problem. Don Kelly cross out to reply -----Original Message----- From: Marshall Lochbaum Sent: Wednesday, January 04, 2012 9:41 AM To: Programming forum Subject: Re: [Jprogramming] Faster deb If you really want top-of-the-line performance, you'll have to go to a sequential machine. Here's my solution, which leaves the leading and trailing blanks in, then specifically deletes them. I don't claim that these tests are universal; it's quite plausible that a different mixture of blanks and words would give different results. Of course, benefits are marginal, and if performance is REALLY critical, I would advise just wasting the 20 lines and 10 minutes that it takes to code the thing in C. ws =. ' ',TAB,LF dlb =. }.^:(ws e.~{.) NB. delete leading blank dtb =. }:^:(ws e.~{:) NB. delete trailing blank m =. ws -.@:e.~ a. s =. 2 2 2$ 0 1 1 2 0 2 1 0 sdeb =: [: dlb@:dtb (1;s;m)&;: fdeb =: [: dlb [ #~ [: -. [: (] *. 1&|.) ' ' = [ test =. ; ' test'&,&.> (1e5?@$10) <@$"0 ]' ' 100 (6!:2) 'deb test' 0.0167294 100 (6!:2) 'sdeb test' 0.012571 100 (6!:2) 'fdeb test' 0.0162943 (deb -: sdeb) test 1 (deb -: fdeb) test 1 Marshall On Wed, Jan 4, 2012 at 11:53 AM, Ian Clark <earthspo...@gmail.com> wrote: > okay, I didn't read Raul's posting properly. > > On Wed, Jan 4, 2012 at 4:44 PM, Ian Clark <earthspo...@gmail.com> wrote: > > Raul's points are valid, but as a technique I like it. I'm going to > > add it to my collection of idioms for a monograph on string-handling. > > > > Rotate-and-compare can be generalized to detect any given letter > > followed/preceded by some other. But in the speed stakes, there's > > often extra housekeeping handling the string ends. > > > > Harking back to a recent thread where (;:inv) came up, how about these > too? > > > > wdeb=: ;:inv @ ;: > > udeb=: ] &. ;: NB. a faster variant of the same idea > > > > Not as fast as either deb or fdeb, (besides mishandling punctuation) > > but with a certain idiot appeal. And try replacing (]) with (|.), > > (~.), sort, etc. > > > > In my monograph, (;:) will have a chapter to itself. > > > > > > On Wed, Jan 4, 2012 at 1:54 PM, Raul Miller <rauldmil...@gmail.com> > wrote: > >> As you point out, these are not equivalent. > >> > >> # TEST=: ' this is a test ' > >> 26 > >> # deb TEST > >> 14 > >> # fdeb TEST > >> 15 > >> > >> Note also: > >> # ]&.;: TEST > >> 14 > >> > >> That said: > >> # ]&.;: ' Don''t do this... ' > >> |open quote > >> > >> Also, the timing difference between 3.446e_6 and 3.293e_6 is > inconsequential. > >> > >> -- > >> Raul > >> > >> On Wed, Jan 4, 2012 at 2:14 AM, Alan Stebbens <a...@stebbens.org> wrote: > >>> "delete extra blanks" from strings.ijs has this definition: > >>> > >>> deb =: #~ (+. (1: |. (> </\)))@(' '&~:) > >>> > >>> NB. Here is a slightly faster deb: > >>> > >>> fdeb =: [ #~ [: -. [: (] *. 1&|.) ' ' = [ > >>> > >>> NB. s is the test string; w is its boxed words > >>> > >>> w=.;:s=.'now is the time for all good men to come to the aid of > their country' > >>> w > >>> +---+--+---+----+---+---+----+---+--+----+--+---+---+--+-----+-------+ > >>> |now|is|the|time|for|all|good|men|to|come|to|the|aid|of|their|country| > >>> +---+--+---+----+---+---+----+---+--+----+--+---+---+--+-----+-------+ > >>> > >>> NB. show > >>> 1000 tx 'deb ,>w' > >>> 3.446e_6 3072 > >>> > >>> 1000 tx 'fdeb ,>w' > >>> 3.293e_6 3072 > >>> > >>> NB. same value for both the old and new fun > >>> (deb -: fdeb),>w > >>> 1 > >>> > >>> NB. the results match the original string > >>> s -: fdeb ,>w > >>> 1 > >>> > >>> However, it's not exactly the same as deb: it doesn't remove a single > leading blank, as does deb (which, IMHO, is not necessarily an "extra" > blank anyway). > >>> > >>> Alan > >>> > >>> > >>> > >>> ---------------------------------------------------------------------- > >>> 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