I dug a little for an answer to Henry's first question: what's a dictionary? I found 2 things:
1. We're not the only ones who seem confused about this definition. 2. I found this: https://cs.stackexchange.com/a/30025/59926 that gives precise mathematical definitions, although still subject to debate. Cheers, Raoul Le mar. 1 févr. 2022 à 08:55, Elijah Stone <elro...@elronnd.net> a écrit : > > I disagreed with 'symbols' in 1 > > Roger Hui writes: > > > Premature optimization is said to be the root of all evil in programming > > [Knuth 1974, p.671], but premature generalization is worse. Premature > > optimizations can at least be backed off > > If we start with only symbols as dictionary keys, then it is easy to let > other objects be keys later; but it is much harder to do the reverse. > > In particular, I do not like (<<x) { y, and that is not necessary if only > allowable keys are symbols. > > > > b. I envisioned Dic , newitem as the idiom to add an item to Dic. > > newitem would be an item of Dic. > > I still do not understand. A dictionary maps keys to values. I infer > from what you say that newitem is a value. Where is the key? > > > > Duplicate keys are interesting and important. There needs to be a > > way to get the set of values associated with a key. > > Wait--one key can be associated with multiple values? An array is now a > multi-valued function? I strongly object to that. > > > > 2c. The number of keys is surely of interest, as is the number of > > distinct keys. There needs to be some way to query that, and ($ Dic) > > seemed good for the number of keys; perhaps ($@~.) for the distinct keys > > Ah--what semantics were you envisioning for ~.? I imagined that, if > supported, ~.Dic would return a dictionary whose keys are a subset of > Dic's, such that no two of the values are the same as each other. The > difficulty would be deciding, given two keys corresponding to the same > value, which to pick. > > But given your mention of 'distinct keys' (and above the 'set of values > associated with a key') I think we may still be talking about very > different things when we say 'dictionary'. > > > > 2e. This is a real issue. You say 'keys should not be ordered' but I am > > not sure about that. This needs discussion. > > I think of an array as a function. A function's domain is not inherently > ordered. We may impose some ordering on it; what should we impose (if > anything)? > > J defines two orderings: < and /:. Ordinary array's domains are sorted > according to both. Which is the interesting one? I think it is <. < has > interesting properties; /: is simply total for the sake of being total. > And as < is not total, it is not suitable for ordering dictionary keys. > > An alternative is to retain insertion order. I think this is definitely > better than ordering according to /:, but am still sceptical that it is > worthwhile. I still do not think of maps as having order. > > > >> At least: domain (new primitive) index transpose amend apply-at-rank > >> filter indices. From rank follows any rank-0 operation. Maybe: key > >> catenate shape reshape nub index-of tally reduce. > > > > Please: when I was younger, I might have said 'What you say makes no > > sense' to mean you were wrong; but after a long life of making mistakes > > I mean no more than what I say: I don't get what you're saying. It > > might be that I'm dense. > > I definitely did not mean to imply that! Just did not know what you > were referring to. > > I think the following should definitely be supported: > > key { Dic > > |: Dic > > axes |: Dic > > values keys} Dic > > u"n Dic > > Dic # Dic > > I. Dic > > Because u"n Dic works, any primitive of rank 0 may be applied to a > dictionary. I think there should also be a new 'domain' primitive that > gives the domain of an array. > > I think the following should perhaps be supported, but am not sure: > > Dic u/. Dic > > Dic , Dic > > $ Dic > > shape $ Dic > > ~. Dic > > # Dic > > u/ Dic > > Dic1 i. Dic2 > > The last sentence results in a mapping from the keys of Dic1 to keys of > Dic2 (call it R), where for any i, (i{Dic1) -: Dic2 {~ i { R. Problems > with i., /, ~., and /. are all the same: order. > > -E > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm