How about:
fun3 =: ' ' -.~ ]
fun3 a
nowisthetimeforallgoodmentocometotheaidoftheircountry
On 2012/01/04 20:05 , Linda Alvord wrote:
> 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: [email protected]
> [mailto:[email protected]] On Behalf Of [email protected]
> 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<[email protected]> wrote:
>
>> okay, I didn't read Raul's posting properly.
>>
>> On Wed, Jan 4, 2012 at 4:44 PM, Ian Clark<[email protected]> 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<[email protected]>
>> 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<[email protected]> 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