Dictionaries in q/k are actually a core part of the language, not just a tool or package.
Dictionaries are the tool behind namespaces. Dictionaries are also the ‘items’ in the table data structures. If you have a list of dictionaries of keys and equal length values, then in the special case: Flip (or transpose) of the Dictionary _automatically_ converts to a Table (from which the user can Select …) I don’t wish to present examples in this email, but instead attach a ‘brief’ sample of q from a paper I wrote “A Taste of Q” (about 120 lines of session output) (I am very happy the full PDF paper to anyone who wishes a copy, it is about 23 pages that showcases q). The sample is all about q dictionaries to understand how they extend to become the building blocks of Tables (and although not shown here, namespaces). A dictionary is a list of Key ! Value pairs, but as a basic data type that also allows indexing, assignment and assignment by key (eg name). They are an incredibly powerful part of q and also very elegantly implemented. Symbols and Symbol lists are also a core requirement (not quoted strings which might make things difficult in J). Building a dictionary as a data structure will deliver half the potential of dictionaries, but to deliver the full potential I would argue for a primitive implementation on which other primitives can apply. I agree with Eric, it should be modelled, and anyone involved in that should closely study the q implementation of dictionaries and how this core data structure underpins such a large part of q (and helped to make the interpreter as small and powerful as it is… and in this regard I can see Henry wincing, making dictionaries a core part of J is likely not feasible, but at least a full understanding of q might help to pave the way as a key datatype. If I can find the time I’d be happy to help on the model… sample file attached as a .txt file… note the q) commands may all be typed into a q session to play. You can download a free copy of q for personal use from www.kx.com <http://www.kx.com/>. Regards Rob > On 1 Feb 2022, at 5:27 am, Henry Rich <henryhr...@gmail.com> wrote: > > I have looked into this quite a bit. I am not convinced that Dictionary is a > fundamental datatype like number or letter, or that the current symbol > support is deficient. That makes the first questions What is a Dictionary? > and Where can a Dictionary be used in J? > > The use case that would be important to me is a key-value store, aka > associative memory, where the Dictionary remember keys and values and later > returns a value when presented with the key. This feels to me like a package > written in J rather than a J primitive. A Dictionary would be a numbered > locale. The place where I could see added support inside J would be in > adding to and deleting from hashtables, specifically ones created/used by > m&i. . > > I invite proposals on what a Dictionary package needs to do. I have done > this before, and Jan-Pieter Jacobs responded with a package. Quoting from > his message of 20210327: > > *** QUOTE > > install'github:jpjacobs/types_dict@main' > > (except on (my) android, where github installs don't seem to work, neither > in the Gui version JA nor on the commandline via termux) > > It is pretty simple in use, you just use: > d=: dict keys;vals > for creating the dictionary, which is a OOP object, having the following > methods: > get, set, map, sort, destroy, whose documentation is contained in > help_pdict_ > > For performance, the create verb precomputes the lookup for the get verb, > both forward get (key->value) and backward get inv (value->first key) upon > object creation. > > *** END QUOTE > > I have not looked into this package, but it seems to me to have the right > entry points. Can we take that as a starting point to see what needs to be > added? The first step of course would be to put the addon under Package > Manager. > > Henry Rich > > > > On 1/31/2022 12:58 PM, Elijah Stone wrote: >> I agree with Eric regarding the challenges of adding dictionaries. >> >> One issue: I think a necessary prerequisite is improved symbols. >> >> On Mon, 31 Jan 2022, Alex Shroyer wrote: >> >>> I agree with Raoul that competing with Python is not a good idea. >>> But J can learn from Python's decisions (good and bad) to grow and improve. >>> In my opinion, numpy is Python's "killer app" because it brings reasonable >>> performance without much conceptual overhead. >>> The feature of Python that enabled numpy is its extensibility, down to the >>> C layer. >>> >>> There are other good features of Python that J could copy, in particular >>> the 'dictionary' data type. >>> The array language K has dictionaries, so J might take some inspiration >>> from there for integrating them into the language. >>> >>> Cheers, >>> Alex >>> >>> >>> On Mon, Jan 31, 2022 at 5:30 AM Raoul Schorer <raoul.scho...@gmail.com> >>> wrote: >>> >>>> Just my 2c, but I think that competing with python in general is somewhat >>>> delusional. I think the key point for expanding J use to have a "killer J >>>> app". For example, an improved clone of or excellent plugin for VisiData ( >>>> https://www.visidata.org/) is my idea of a killer app. But someone here >>>> may >>>> have a better idea? >>>> >>>> Cheers, >>>> Raoul >>>> >>>> Le lun. 31 janv. 2022 à 03:49, Ric Sherlock <tikk...@gmail.com> a écrit : >>>> >>>> > Yes from a data structure point of view, inverted tables get you a lot of >>>> > the way (note they're also available in the 'general/misc' addon - load >>>> > 'general/misc/inverted' ) and I've used them to good effect in my >>>> > 'data/struct' addon (https://github.com/tikkanz/data_struct). >>>> > I agree that J's arrays are more general, flexible & powerful. But when >>>> > you're dealing with a tabular data set there is an overhead to keeping >>>> the >>>> > fields in a table in sync that dataframes can help with. Perhaps it's >>>> > something abstracting the structure so you don't have to deal so much >>>> with >>>> > the mechanics of manipulating it? At least for me :) >>>> > >>>> > On Mon, Jan 31, 2022 at 3:28 PM Elijah Stone <elro...@elronnd.net> >>>> wrote: >>>> > >>>> > > https://code.jsoftware.com/wiki/Essays/Inverted_Table, perhaps? >>>> > > >>>> > > That said, I think a great strength of j is that data are _not_ >>>> > explicitly >>>> > > tabular. The associations are defined in an ad-hoc manner as needed by >>>> > > the programmer. This is also an essential difference between the array >>>> > > paradigm and the relational paradigm (cf SQL): in the former, pointers >>>> > > come with implicit context; in the latter, that context must be >>>> explicit. >>>> > > >>>> > > -E >>>> > > >>>> > > P.S. regarding analysis/optimization: I would love to see it, but for >>>> > some >>>> > > reason everybody is scared of building a compiler because of the >>>> parsing >>>> > > problem. >>>> > > >>>> > > On Mon, 31 Jan 2022, Ric Sherlock wrote: >>>> > > >>>> > > > Yes, I've been thinking that a Dataframes equivalent in J would be >>>> > > useful. >>>> > > > Most things are already possible with J's arrays, but conceptually >>>> > > > DataFrames are well understood by many now, and they make it easy to >>>> > work >>>> > > > with datasets as named fields. >>>> > > > I've spent a reasonable amount of time working with Pandas, but have >>>> > > > recently been using Polars (Rust backend with Python bindings) which >>>> > > really >>>> > > > shines for larger datasets. Performance (especially read/write) is >>>> > > awesome, >>>> > > > and the LazyFrames which optimise your query/analysis plan make a big >>>> > > > difference too. >>>> > > > I haven't taken enough time to explore it, but maybe Jd is the >>>> starting >>>> > > > point in this space for J? >>>> > > > >>>> > > > >>>> > > > On Mon, Jan 31, 2022 at 9:01 AM Michail L. Liarmakopoulos < >>>> > > > m.l.liarm...@gmail.com> wrote: >>>> > > > >>>> > > >> Hello all, >>>> > > >> >>>> > > >> I find any parallels between python and J pretty interesting, being >>>> a >>>> > > >> person with some python experience and an interest of the >>>> applications >>>> > > of >>>> > > >> both python and J in mathematical modelling, analytics, >>>> computational >>>> > > math >>>> > > >> and perhaps computational physics too. >>>> > > >> >>>> > > >> If you'd like to bring some features from the python math/analytics >>>> > > >> libraries/ecosystem in J, I'd suggest you to look at the features of >>>> > > three >>>> > > >> libraries: >>>> > > >> >>>> > > >> - numpy (I believe most features are already covered from the built >>>> in >>>> > > >> features of an array language such as J) >>>> > > >> >>>> > > >> - pandas ( a nice library for manipulating csv files within python >>>> as >>>> > > >> dataframe objects -- see the dataframes from the R language) >>>> > > >> >>>> > > >> - scipy (a collection of methods and functions ranging from solving >>>> > > >> numerically: differential equations, evaluating definite integrals, >>>> > > >> constrained and unconstrained optimization, and I believe statistics >>>> > > too) >>>> > > >> >>>> > > >> There is also out there an amazing python library for symbolic >>>> > > calculations >>>> > > >> (like the ones you can do with Mathematica or WolframAlpha: symbolic >>>> > > >> evaluation of definite and indefinite integrals, symbolic solutions >>>> of >>>> > > >> diff. equations, symbolic solutions of algebraic and Diophantine >>>> > > equations >>>> > > >> etc...). It's called sympy. >>>> > > >> >>>> > > >> But I'm not sure if you'd like J to include symbolic computations >>>> too >>>> > > or if >>>> > > >> the aim of the language is to excel only in numerics, data >>>> analytics, >>>> > > >> stats, whatever can be quantified pretty much. >>>> > > >> >>>> > > >> My few cents as food for thought. >>>> > > >> >>>> > > >> >>>> > > >> Best regards, >>>> > > >> >>>> > > >> --- >>>> > > >> Michail L. Liarmakopoulos, MSc >>>> > > >> >>>> > > >> On Sun, Jan 30, 2022, 20:39 R.E. Boss <r.e.b...@outlook.com> wrote: >>>> > > >> >>>> > > >> > >>>> > > >> > >>>> > > >> > I copied the first chapter of the book A Journey to Core Python >>>> (in >>>> > > >> > >>>> > > >> >>>> > > >>>> > >>>> https://drive.google.com/file/d/1p1uIANh-LFniNNRqjDeeWWd4_-ddEZmz/view?usp=sharing >>>> >>>> > > >> ) >>>> > > >> > and have the question: do we want that J is competitive with >>>> Python? >>>> > > >> > >>>> > > >> > If the answer is yes, the next question is: what is the to do list >>>> > to >>>> > > be >>>> > > >> > competitive and how long will it take? >>>> > > >> > >>>> > > >> > (And then the unavoidable question: WHY?) >>>> > > >> > >>>> > > >> > >>>> > > >> > >>>> > > >> > Personally I think we must aim on the niches in the market, as >>>> there >>>> > > are >>>> > > >> > the mathematical oriented people, e.g. the broad scientific >>>> > community. >>>> > > >> > >>>> > > >> > Then all people experienced in Excel or other spreadsheets or >>>> > > calculation >>>> > > >> > tools. >>>> > > >> > >>>> > > >> > Schools and universities. Financial and statistical oriented >>>> people. >>>> > > >> > >>>> > > >> > >>>> > > >> > >>>> > > >> > What we should do, IMHO, is >>>> > > >> > >>>> > > >> > - to emphasize the strengths of J, >>>> > > >> > >>>> > > >> > - to improve (considerably) the error handling of J, >>>> > > >> > >>>> > > >> > - to admit the steep learning curve, >>>> > > >> > >>>> > > >> > - to facilitate the use of mnemonics instead of primitives (I >>>> tried >>>> > > this >>>> > > >> > afternoon the primitives.ijs for half an hour, but was not capable >>>> > of >>>> > > use >>>> > > >> > any mnemonic, not even with >>>> > > >> > https://code.jsoftware.com/wiki/Primitives_to_Mnemonics) >>>> > > >> > >>>> > > >> > - to decide which of the features, benefits or applications (of >>>> > > Python) >>>> > > >> we >>>> > > >> > want J to have. >>>> > > >> > >>>> > > >> > >>>> > > >> > >>>> > > >> > >>>> > > >> > >>>> > > >> > Just my 2 cents. >>>> > > >> > >>>> > > >> > R.E. Boss >>>> > > >> > >>>> > > >> > >>>> > > >> > >>>> > > >> > >>>> > > >> > >>>> > > >> > >>>> > > >> > >>>> > ---------------------------------------------------------------------- >>>> > > >> > 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 >> ---------------------------------------------------------------------- >> 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