A large share of real data is organized in tree-like structures where lists
(integer indexes) are mixed with dictionaries (arbitrary type indexes).
An obvious example would be http centric APIs where json use is pervasive
-- accessing an element at arbitrary depth is a trivial task in other
languages.
Below is an example of getting a title of the first post in python, what
would be the current j equivalent?

Regards,
  Danil

#!/usr/bin/python3
import json, urllib.request

url = "https://jsonplaceholder.typicode.com/posts";
data = json.loads( urllib.request.urlopen(url).read().decode())

print (data[0]["title"])




вт, 1 февр. 2022 г. в 15:47, Ian Clark <earthspo...@gmail.com>:

> Following this thread I recall long-ago disputes in IBM R&D and university
> IT departments about supporting language features such as non-ASCII writing
> systems, database access (especially relational), *enum*, *class*, *struct*
> and *const*, right back to the egregiously misnamed "real" numbers.
>
>
> For my sins, I write a lot of Swift code. Swift boasts a me-too
> *dictionary*
> à-la Python, but I've never found a use for it. Except for one single
> coding task: writing calls to legacy packages. Many of these appeared in
> the early '90s when *dictionary* was a cool new must-have datatype.
>
>
> People with experience of Apple SDKs will know what a pain-in-the-neck
> calls are which return *NSDictionary* values or require arguments having
> that datatype. Mercifully, few do.
>
>
> I suspect my experience is typical of Swift coders. I also suspect most of
> them don't write code to solve problems as J-ers do, but only to read data
> from one package and write it unaltered to another.
>
>
> Now I'm aware this is an ignorant attitude. Please somebody show me how
> wrong I am. With examples.
>
>
> When I first met J back in the '90s, and had to typeset it for VECTOR, it
> struck me as hostile to the very notion of importing me-too features from
> other languages. Except as Foreigns or addons. A habit which starved
> newcomers of familiar landmarks. But one thing J IDE did do well was eat
> its own dogfood. You can admire the dogfood in locales _z_ and _j_ and I'd
> recommend beginners to study everything they find there.
>
>
> So… got a coding problem? J IDE solved it before you were born.
>
>
> One clear use for *dictionary* in J IDE would be to reimagine *Public_j_*,
> *SystemFolders_j_*, *UserFolders_j_* plus much of *0!:* and *1!:* . Please
> somebody tell me of all the wonderful vistas it would open up for the
> jobbing J coder.
>
> On Tue, 1 Feb 2022 at 09:19, Jan-Pieter Jacobs <janpieter.jac...@gmail.com
> >
> wrote:
>
> > Interesting discussion.
> > My little addon  (https://github.com/jpjacobs/types_dict
> > <http://www.github.com/jpjacobs/types_dict>) works pretty well in my
> test,
> > with any rectangular data (including boxes) as either keys or values. My
> > only gripe with it was that due to subtle details of inverse in
> combination
> > with locales, the lookup of keys by values cannot be immediately
> > implemented with the inverse of values by keys, but this is minor.
> > When writing the addon, I haven't thought about any inter-dictionary
> > operation, nor any primitives to work with the dictionaries, but I do see
> > how they could be useful, e.g. joining dictionaries (,) , making set
> > difference (-.), # for the number of elements, etc.
> >
> > I do not understand what you intend with shape and dimensions of a
> > dictionary. As far as I understood, dictionaries are just a bag of
> > key:value pairs, which, in good implementations, can be any valid data
> > type.
> >
> > If not, it starts looking like a dataframe/inverted table/... which could
> > be implemented using a dictionary of columns, but I think a distinction
> > should be made.
> >
> > I personally like a lot the way Lua (http://lua.org) handles
> dictionaries
> > (called tables):
> > - They allow any type for key and value (heterogeneous)
> > - successive positive keys are used for using a table as array (downside:
> > indices are 1-based)
> > - They can be nested
> > - They also have what they call meta-methods, defining what e.g. table1 +
> > table2 or any operation should mean, but also offering the possibility to
> > override indexing, assignment, calling a table as function ... by Lua
> > functions (or C functions). This allows implementing OOP or whatever you
> > want.
> >
> > The Lua shared library is also tiny, if I recall correctly around 350kB
> for
> > the interpreter and all standard libraries. The Lua language itself and
> its
> > C API  is very simple, very stable and very well documented.
> > So I wondered it would not make sense binding Lua to J, and took an
> initial
> > attempt at it here: https://github.com/jpjacobs/api_lua but didn't get
> > very
> > far beyond opening, evaluating Lua commands and closing a Lua State due
> to
> > lack of C experience.
> >
> > I guess the difficult part in such enterprise would be the marshalling of
> > data or pointers thereto between J and Lua...
> >
> > Maybe someone interested could take my dabbling as a starting point for
> > something more serious :).
> >
> > On Tue, 1 Feb 2022 at 08:55, Elijah Stone <elro...@elronnd.net> wrote:
> >
> > > > 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
> >
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to