[Jprogramming] A Different Less?

Henry Rich henryhrich at gmail.com
Wed Jan 20 23:57:32 UTC 2016


Right.

Henry Rich

On 1/20/2016 6:55 PM, Jose Mario Quintana wrote:
> Thanks for your feedback; that is reassuring to me.  This is a more
> comprehensive comparison:
>
>      assert X (2 -:/\ (([: <. %)~) ; ([: <. %~) ; (<.@%~) ; (<.@(%~)) ;
> (<.@:%~) ; (<.@:(%~))) Y
>
>     11 stp noun define
> X (([: <.  %)~)  Y
> X ( [: <.  % ~)  Y
> X (    <.@ % ~)  Y
> X (    <.@(% ~)) Y
> X (    <.@:% ~)  Y
> X (    <.@:(%~)) Y
> )
> ┌──────────────────┬───────┬─────────────┬──────────┐
> │Sentence          │Space  │Time         │Product   │
> ├──────────────────┼───────┼─────────────┼──────────┤
> │X (([: <.  %)~)  Y│8797184│0.0285709797 │251344.165│
> ├──────────────────┼───────┼─────────────┼──────────┤
> │X ( [: <.  % ~)  Y│8797184│0.0268573186 │236268.774│
> ├──────────────────┼───────┼─────────────┼──────────┤
> │X (    <.@ % ~)  Y│4219392│0.00446664877│18846.5421│
> ├──────────────────┼───────┼─────────────┼──────────┤
> │X (    <.@(% ~)) Y│8797184│0.0247148887 │217421.423│
> ├──────────────────┼───────┼─────────────┼──────────┤
> │X (    <.@:% ~)  Y│4219392│0.00405533641│17111.054 │
> ├──────────────────┼───────┼─────────────┼──────────┤
> │X (    <.@:(%~)) Y│8797184│0.02544385   │223834.23 │
> └──────────────────┴───────┴─────────────┴──────────┘
>
> This shows, if I am not mistaken, that  <.@:% ~  dominates its counterpart
>   ([: <. %)~  .
>
>
>
>
>
>
>
> On Wed, Jan 20, 2016 at 6:30 PM, Henry Rich <henryhrich at gmail.com> wrote:
>
>> I've not seen such a case, where [: u v is fast but not u@:v .
>>
>> Henry Rich
>>
>>
>> On 1/20/2016 6:09 PM, Jose Mario Quintana wrote:
>>
>>> The experiment was for the specific performance of [: u v vs u @: v for
>>> the
>>> given u, v, X and Y.  However, there are other instances as well,  for
>>> example, the reference [2].  I do not recall seen any instance of such
>>> discrepancy in performance the other way around; that is when [: u v
>>> clearly dominates u @: v but I would be grateful if you or anyone else
>>> points me in that direction.
>>>
>>> On Wed, Jan 20, 2016 at 5:40 PM, Henry Rich <henryhrich at gmail.com> 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 <. at 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 <mike_liz.day at tiscali.co.uk>
>>>>> To: programming at jsoftware.com
>>>>> 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 at 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:programming-bounces at forums.jsoftware.com]
>>>>>>>> On Behalf Of Linda A Alvord
>>>>>>>> Sent: Wednesday, January 20, 2016 3:15 AM
>>>>>>>> To: programming at jsoftware.com
>>>>>>>> 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:programming-bounces at forums.jsoftware.com]
>>>>>>>> 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
>>>>>>>> <mwlochbaum at gmail.com> 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:
>>>>>>>>>>> programming-bounces at forums.jsoftware.com]
>>>>>>>>>>> On Behalf Of June Kim (???)
>>>>>>>>>>> Sent: maandag 18 januari 2016 5:19
>>>>>>>>>>> To: Programming forum <programming at jsoftware.com>
>>>>>>>>>>> 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
>>>
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm



More information about the Programming mailing list