A useful utility for diving into locales, inl_z_ =: (cocurrent@] ".@] [)"1 0
coclass 't' 'a b' =: 0 1 add =: 3 : 'a+y' :. (3 : 'b+y') 'b + 2' inl 't' 3 'add 2' inl 't' 2 'add inv 2' inl 't' 3 But these issues can also promote a dictionary implementation that does not use classes, but rather a data structure with key/value pairs. On Wednesday, March 24, 2021, 11:33:27 p.m. EDT, Henry Rich <[email protected]> wrote: This works according to the rules: i__o =: aget_cl_^:_1 i__o 97 99 Henry Rich On 3/24/2021 5:49 PM, Jan-Pieter Jacobs wrote: > Hi all, > > In view of the dict add-on I wrote about recently (see [1]) I don't > understand why the inverses won't work for verbs in the class/locale below. > I would expect that if a verb having an inverse (e.g. {&vals@(keys&i.) ) > containing more defined verbs (all in the same locale) works, its inverse > would also work. > > This turns out to be wrong, so I wonder whether this is intended, or a bug, > and if intended, what use the present behaviour has: > > NB. Test class > > coclass 'cl' > > create =: 3 : 0 > > 'keys vals' =: y > > gi =: keys&i. NB. Get indices > > fv =: {&vals > > 0 0$0 > > ) > > > get =: fv@gi NB. works but NOT inverse > > > cgi =: a.&i. NB. constant keys, defined class wide > > cfv =: {&(i.256) NB. constant values > > cget =: cfv@cgi NB. constant get, works but NOT inverse > > aio =: {&(i.256)@(a.&i.)NB. all in one works ALSO inverse > > fcget =: cfv@cgi f. NB. Also works both ways > > lat =: 2 : 'u. @ v.' NB. localized @ > > aget =: cfv lat cgi NB. works, but NOT inverse. > > > d =: codestroy > > > cocurrent 'base' > > > o =: 'cl'conew~ 'abcd';i.4 > > > get__o 'ac' NB. fine > > get__o inv 1 3 NB. not ok. > > > cget__o 'ac' > > cget__o inv 97 99 NB. not ok > > > fcget__o 'ac' > > fcget__o inv 97 99 NB. works > > > aio__o 'ac' > > aio__o inv 97 99 NB. works > > > aget__o 'ac' > > aget__o inv 97 99 NB. not ok. > > The fcget and aio do not need lookups and just work as intended, The others > work in one way, but not the inverse. It does not seem to be a problem > between the class locale and the object locale, because then cget would > work while get wouldn't. > Using, out of curiosity a "localized" version of at , using u./v. does not > resolve the problem either. > > Fixing all verbs solves the issue but in my usecase, the problem is > occasionally, keys and vals are updated, which would require all verbs > using them to account for this, and it would feel messy to me, for > something I expected to just work. Or perhaps, I've gotten too used to J > being 100% logical... > > What do you think? (this is in J903 beta-f on Linux 64 AVX). > Thanks, > Jan-Pieter > [1]: http://jsoftware.com/pipermail/programming/2021-March/057881.html > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm -- This email has been checked for viruses by AVG. https://www.avg.com ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
