There could, theoretically, be special code triggered from inside other adverbs
and conjunctions that inspect their arguments. If you can image some
construction with @: or [:, which by itself has no special code but in some
larger context, seen later by the parser, has an optimization.
The existence of such construct is purely speculative and doubtful. But if you
wanted to go hunting you could for example grep for CATCO or CCAP and see if it
leads to a pot of gold.
But realistically speaking, I agree with Marshall's analysis and am considering
unifying [: and @: once and for all in Unbox.
Sent from my Verizon Wireless 4G LTE smartphone
-------- Original message --------
From: Jose Mario Quintana <[email protected]>
Date: 01/21/2016 4:22 PM (GMT-05:00)
To: Programming forum <[email protected]>
Subject: Re: [Jprogramming] A Different Less?
The following confirms and quantifies the effect of triggering special code
(in one instance).
Y=. 6666$'Mississippi'
11 stp noun define
([: /: /:)Y
/: @: /: Y
)
┌──────────────┬──────┬──────────────┬──────────┐
│Sentence │Space │Time │Product │
├──────────────┼──────┼──────────────┼──────────┤
│([: /: /:)Y│198400│0.000115393909│22.8941515│
├──────────────┼──────┼──────────────┼──────────┤
│ /: @: /: Y│71424 │3.1391718e_5 │2.24212206│
└──────────────┴──────┴──────────────┴──────────┘
On Wed, Jan 20, 2016 at 5:06 PM, Henry Rich <[email protected]> wrote:
> Right, but I noticed that she was using 13 : using /: /: y & wasn't sure
> she was aware of an issue.
>
> Moreover, I find that ([: /: /:) is NOT special; surprising, because
> usually when u@:v y is fast, ([: u v) y is too; not here.
>
> The definitive list of special code is at
>
>
> http://code.jsoftware.com/wiki/Vocabulary/SpecialCombinations#Sorting_and_Ordering
>
>
> Henry Rich
>
>
>
>
> On 1/20/2016 7:50 AM, Mike Day wrote:
>
>> 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