On my Windows 10 machine J805 fails to register as a COM Server. When I use jreg.cmd under 804 I get a "J DLL Server (version 3) Type Library" in the kist of available Type Libraries in MS Visual Studio.
When I do the same with J805, no type library is registered. Is this a bug or a feature? I would prefer working with 805 over 804. Any hints/fixes? > On 13 Apr 2017, at 16:23, 'Bo Jacoby' via Programming > <programm...@jsoftware.com> wrote: > > Hi Louis. > Thanks for asking. I regret not knowing the answer. > An ordinal fraction is like an array in J, with minor differences. > - Arrays have names. Ordinal fractions have numbers. > - An array has a finite number of dimensions. An ordinal fraction has an > infinite number of dimensions. > - Arrays may have different shapes. All ordinal fractions have the same > shape: 9 9 9 9 . . . > - Arrays have zero-origin indexing (0 1 . . . n). Ordinal fractions have > one-origin indexing (1 2 3 4 5 6 7 8 9). > > - Arrays have elements. Ordinal fractions do not have elements. > - Arrays may have subarrays. All ordinal fractions have subordinate ordinal > fractions. > - Array elements contain data. Any ordinal fraction may contain a data > element. > Ordinal fractions were invented (by me) in 1980, but have had limited > dissemination so far. I made programs in fortran and pascal and basic for > manipulating ordinal fraction files, but I have not managed to do it in J. > The programs were general, because the logic is in the data file and not in > the program. I have been alone doing this. > Thanks! Bo. > > > > > Den 20:08 torsdag den 13. april 2017 skrev Louis de Forcrand > <ol...@bluewin.ch>: > > > Hi Bo, > This is cool. > > As for the way you suggest using it here, isn't it equivalent to (without the > first six rows of your data): > > (~.@[ ,. +//.)/@|: > ? > > Louis > >> On 12 Apr 2017, at 21:57, 'Bo Jacoby' via Programming >> <programm...@jsoftware.com> wrote: >> >> Hi Joe! >> My favorite datastructure is ORDINAL FRACTIONS - the algebra of data >> >> | >> | >> | >> | | | >> >> | >> >> | >> | >> | | >> ORDINAL FRACTIONS - the algebra of data >> This paper was submitted to the 10th World Computer Congress, IFIP 1986 >> conference, but rejected by the referee.... | | >> >> | >> >> | >> >> >> Your data are coded like this >> 10 Joe >> 20 Bob >> 30 Jane >> 01 blue >> 02 red >> 03 purple >> 11 1 >> 11 -1 >> 11 1 >> 22 1 >> 22 1 >> 22 3 >> 22 -1 >> 22 -1 >> 33 5 >> 33 -2 >> 33 2 >> (Written with double CRs because the mail program has a history of deleting >> my CRs). >> Summation gives the result >> 10 Joe >> 20 Bob >> 30 Jane >> 01 blue >> 02 red >> 03 purple >> 11 1 >> 22 3 >> >> 33 5 >> I have not done the summation in J, but I'd like to do it. >> Perhaps this helps you. >> Bo. >> >> >> >> Den 0:04 torsdag den 13. april 2017 skrev chris burke >> <cbu...@jsoftware.com>: >> >> >> Incidentally, for production code, I suggest starting by removing any sales >> not matched in returns and vice versa, so that the matching algorithm is >> applied only to potential matches. >> >>> On Wed, Apr 12, 2017 at 2:53 PM, chris burke <cbu...@jsoftware.com> wrote: >>> >>> Great. >>> >>> In case you need more complicated handling of the "gray area" >>> transactions, I believe they would be relatively few in number, so most of >>> the time you could do the matching efficiently, then check for any keys >>> with returns preceding sales. For those, setting aside the first such >>> return and repeating should clear them quickly. >>> >>> Timing should be well under 1 second for a million records. >>> >>>> On Wed, Apr 12, 2017 at 1:57 PM, Joe Bogner <joebog...@gmail.com> wrote: >>>> >>>> Just for completeness, I added a line that incorporates the sequence check >>>> into the cancel logic. Works great >>>> >>>> NB. hui progressive index >>>> NB. http://code.jsoftware.com/wiki/Essays/Progressive_Index-Of >>>> oc=: i.~ (] - {) /:@/: >>>> pi=: #@[ ({. i.&(,.oc) }.) [ i. , >>>> >>>> NB. argument is 3-col table of seq,key,qty >>>> NB. result is the unmatched transactions >>>> matchtrans=: 3 : 0 >>>> msk=. 0<{:"1 y >>>> sales=. msk#y >>>> returns=. (-.msk)#y >>>> ndx=. (}."1 sales) pi | }."1 returns >>>> cancels=. ndx<#sales >>>> NB. ensure cancel is after sale >>>> cancels =. cancels *. (({."1 (<<(cancels)#ndx){sales) < ({."1 >>>> (cancels#returns))) >>>> ((<<<cancels#ndx){sales),(-.cancels)#returns >>>> ) >>>> >>>> >>>>> On Wed, Apr 12, 2017 at 4:14 PM, Joe Bogner <joebog...@gmail.com> wrote: >>>>> >>>>> Chris, this looks promising. Thanks for sharing. It's nearly instant on >>>> a >>>>> million rows. >>>>> >>>>> Which row had a return before a transaction? seq 10 was an example of a >>>>> partial return. The hypothetical customer returned 2 out of the 5 >>>> purchased >>>>> prior. I added that example since technically per the original spec it >>>>> wouldn't be cancelled out in this pass. It's a gray area so I may be >>>> able >>>>> to use this approach, especially since I don't see how to incorporate >>>> the >>>>> time element into the progressive index. >>>>> >>>>> Thanks again >>>>> >>>>> >>>>> On Wed, Apr 12, 2017 at 3:52 PM, chris burke <cbu...@jsoftware.com> >>>> wrote: >>>>> >>>>>> This might be done by comparing matrices of sales and returns. The >>>>>> function >>>>>> below seems to be close to what you want. It doesn't exactly match your >>>>>> example, but your example has cases where returns are made before the >>>>>> transactions. Was this intentional? >>>>>> >>>>>> The code should run faster than a looping solution. >>>>>> >>>>>> Code: >>>>>> >>>>>> NB. hui progressive index >>>>>> NB. http://code.jsoftware.com/wiki/Essays/Progressive_Index-Of >>>>>> oc=: i.~ (] - {) /:@/: >>>>>> pi=: #@[ ({. i.&(,.oc) }.) [ i. , >>>>>> >>>>>> NB. argument is 3-col table of seq,key,qty >>>>>> NB. result is the unmatched transactions >>>>>> matchtrans=: 3 : 0 >>>>>> msk=. 0<{:"1 y >>>>>> sales=. msk#y >>>>>> returns=. (-.msk)#y >>>>>> ndx=. (}."1 sales) pi | }."1 returns >>>>>> cancels=. ndx<#sales >>>>>> ((<<<cancels#ndx){sales),(-.cancels)#returns >>>>>> ) >>>>>> >>>>>> Example: >>>>>> >>>>>> dat=: ".;._2 (0 : 0) >>>>>> 1 1 1 >>>>>> 2 1 _1 >>>>>> 3 1 1 >>>>>> 4 2 1 >>>>>> 5 2 1 >>>>>> 6 2 3 >>>>>> 7 2 _1 >>>>>> 8 2 _1 >>>>>> 9 3 5 >>>>>> 10 3 _2 >>>>>> 11 3 2 >>>>>> ) >>>>>> >>>>>> matchtrans dat >>>>>> 3 1 1 >>>>>> 6 2 3 >>>>>> 9 3 5 >>>>>> >>>>>> >>>>>> On Wed, Apr 12, 2017 at 9:35 AM, Joe Bogner <joebog...@gmail.com> >>>> wrote: >>>>>> >>>>>>> I have a problem I'm trying to solve in different languages. I have a >>>>>>> solution in SQL and also in kdb which largely resembles the SQL >>>>>> solution. >>>>>>> I'm curious what a J solution would look like. More specifically, I'm >>>>>>> interested in picking the brains of others here to see if this type >>>> of >>>>>>> problem can be solved without looping (some form of scan?). >>>>>>> >>>>>>> EDIT: Initially I wrote this up thinking the J solution would >>>> difficult, >>>>>>> but it was actually fairly straightforward -- about 15 minutes, but >>>>>> still >>>>>>> would like to see if there are alternatives. If nothing else, maybe >>>> an >>>>>>> interesting problem to share. >>>>>>> >>>>>>> Example data: >>>>>>> >>>>>>> A store has a transaction log with a sequence for each transaction. >>>> The >>>>>>> transaction log records a key for a unique customer/item combination. >>>>>> The >>>>>>> transaction log records how many units were purchased or returned. >>>>>>> >>>>>>> Goal: >>>>>>> Attempt to match up related transactions and cancel out instances >>>> when >>>>>> the >>>>>>> customer/item combination is returned at the same quantity as a >>>> previous >>>>>>> transaction >>>>>>> >>>>>>> Examples: >>>>>>> >>>>>>> Joe buys 1 blue pen, which is defective, then returns the 1 defective >>>>>> blue >>>>>>> pen, then buys another blue pen. EXPECTED: cancel out first two >>>>>>> transactions and leave the the last one for 1 pen >>>>>>> >>>>>>> Bob buys 2 red pens in two separate transactions. He then buys 3 >>>> more. >>>>>> He >>>>>>> returns the first two purchases as two separate return transactions. >>>>>>> EXPECTED: cancel out all transactions except the one for qty 3 >>>>>>> >>>>>>> Jane buys 5 purple pens and subsequently returns two of them. She >>>> buys >>>>>> two >>>>>>> more. EXPECTED: No transactions match exactly, so nothing is >>>> cancelled >>>>>> out >>>>>>> >>>>>>> >>>>>>> Data: >>>>>>> >>>>>>> data=: 0 : 0 >>>>>>> seq key qty >>>>>>> 1 1 1 >>>>>>> 2 1 _1 >>>>>>> 3 1 1 >>>>>>> 4 2 1 >>>>>>> 5 2 1 >>>>>>> 6 2 3 >>>>>>> 7 2 _1 >>>>>>> 8 2 _1 >>>>>>> 9 3 5 >>>>>>> 10 3 _2 >>>>>>> 11 3 2 >>>>>>> ) >>>>>>> tbl =: ,. ' ' cut every cutLF data >>>>>>> 'seqs keys qtys' =: |: ". every }. tbl >>>>>>> >>>>>>> >>>>>>> Goal: >>>>>>> >>>>>>> goals =: 0 : 0 >>>>>>> >>>>>>> goal >>>>>>> >>>>>>> cancelled >>>>>>> >>>>>>> credit >>>>>>> >>>>>>> ok >>>>>>> >>>>>>> cancelled >>>>>>> >>>>>>> cancelled >>>>>>> >>>>>>> ok >>>>>>> >>>>>>> credit >>>>>>> >>>>>>> credit >>>>>>> >>>>>>> ok >>>>>>> >>>>>>> ok >>>>>>> >>>>>>> ok >>>>>>> >>>>>>> ) >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> tbl,.(cutLF goals) >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |seq|key|qty|goal | >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |1 |1 |1 |cancelled| >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |2 |1 |_1 |credit | >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |3 |1 |1 |ok | >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |4 |2 |1 |cancelled| >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |5 |2 |1 |cancelled| >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |6 |2 |3 |ok | >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |7 |2 |_1 |credit | >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |8 |2 |_1 |credit | >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |9 |3 |5 |ok | >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |10 |3 |_2 |ok | >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |11 |3 |2 |ok | >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> >>>>>>> >>>>>>> One approach: >>>>>>> >>>>>>> applycredits =: 3 : 0 >>>>>>> >>>>>>> goals=.(<'goal') >>>>>>> >>>>>>> creditids=.0 >>>>>>> >>>>>>> for_i. (i. # seqs) do. >>>>>>> >>>>>>> key=.i{keys >>>>>>> >>>>>>> seq=.i{seqs >>>>>>> >>>>>>> qty=.i{qtys >>>>>>> >>>>>>> nextcredit =.| {. qtys #~ ((key=keys)*(seqs>seq)*(qtys<0)) >>>>>>> >>>>>>> if. nextcredit = qty do. >>>>>>> >>>>>>> goals=.goals,<'cancelled' >>>>>>> >>>>>>> creditids =. creditids, seqs #~ ((key=keys)*(seqs>seq)*(qtys<0)) >>>>>>> >>>>>>> elseif. creditids e.~ seq do. >>>>>>> >>>>>>> goals=.goals,<'credit' >>>>>>> >>>>>>> elseif. do. >>>>>>> >>>>>>> goals=.goals,<'ok' >>>>>>> >>>>>>> end. >>>>>>> >>>>>>> end. >>>>>>> >>>>>>> goals >>>>>>> >>>>>>> ) >>>>>>> >>>>>>> tbl ,. ( applycredits 0 ) >>>>>>> >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |seq|key|qty|goal | >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |1 |1 |1 |cancelled| >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |2 |1 |_1 |credit | >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |3 |1 |1 |ok | >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |4 |2 |1 |cancelled| >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |5 |2 |1 |cancelled| >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |6 |2 |3 |ok | >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |7 |2 |_1 |credit | >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |8 |2 |_1 |credit | >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |9 |3 |5 |ok | >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |10 |3 |_2 |ok | >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> |11 |3 |2 |ok | >>>>>>> >>>>>>> +---+---+---+---------+ >>>>>>> >>>>>>> >>>>>>> >>>>>>> (cutLF goals) -: ( applycredits 0 ) >>>>>>> >>>>>>> 1 >>>>>>> >>>>>>> >>>>>>> thanks for any input >>>>>>> ------------------------------------------------------------ >>>> ---------- >>>>>>> For information about J forums see http://www.jsoftware.com/forum >>>> s.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 > > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm