I think I agree with all your statements, but you are not responding to my questions, which will help focus the discussion:

1. What is a Dictionary, EXACTLY?

2. What operations can be performed on a Dictionary?

Henry Rich


On 2/1/2022 12:04 AM, 'Pascal Jasmin' via Programming wrote:
The simplest dictionary is a table with 2 columns.  First named k(ey), other 
named v(alue)

A J locale is also a simple dictionary.  Keys are limited to legal names, but 
values are independently typed.  It is difficult to find keys by value, whereas 
it is simpler in the 2 column table concept.  Retrieving multiple values by 
key(s) maybe most valuable as returning a 2 column table with keys returned as 
well to further subselect later.

Instead of limiting to 2 columns, and shoehorning all keys and record values 
into a single variable/column, supporting multi column tables is still a 
dictionary.






On Monday, January 31, 2022, 11:32:50 p.m. EST, Henry Rich 
<henryhr...@gmail.com> wrote:





Many ideas have been aired.  But please, every now and again address the
questions I need answers for:

1. What is a Dictionary, EXACTLY?

2. What operations can be performed on a Dictionary?

Henry Rich



On 1/31/2022 11:09 PM, 'Pascal Jasmin' via Programming wrote:
I forgot to mention that the GET/SET interface can be applied to basic arrays 
and matrices and would mirror functionality of primitives such as { i.

Independently, of whether data structures have a backend that syncs them to 
disk for permanence, they all have get/set/append/delete processing functions.

Yes a typed multi key and multi value table is very much like a DBMS primary key'd table. 
 Many dictionaries fit within those constraints, and compared to a coded key string and 
coded record value, including a simple boxed encoding of every field, a typed version 
will have performance benefits.  A variant field within a dictionary or table is still 
possible and permissible, but shouldn't be a/the default implementation.  A 
table/dictionary can be "self typing" = consistent with the first record value 
appended.

Jd may be heavy for this.  It would be an option to copy its interface, but I 
think I can improve it.



On Monday, January 31, 2022, 09:20:47 p.m. EST, Don Guinn <dongu...@gmail.com> 
wrote:





I hope you find me an idiot, but isn't that what a DBMS does? Maybe the
DBMS in J could be extended a little to do all this.

On Mon, Jan 31, 2022, 6:22 PM 'Pascal Jasmin' via Programming <
programm...@jsoftware.com> wrote:

Beyond dictionaries is a "generic data structure" construct, and a large
extended family of data structures that can respond to the following
commands

GET SET UPSERT APPEND DELETE INSERTafter(item) INSERTbefore(item) WHEREget
CONVERTtoJnativearray UPSERTfromJnativearray

in addition to dictionaries, ragged nested arrays or generally any binary
encoding of datatype;shape/count;content

for dictionaries, some applications (or at least language implementations)
permit variant/inconsistent type keys and/or values.

and generally, a table is a dictionary with

multiple keys and multiple associated values to each unique combination of
the multiple keys.  With potential performance advantages to keeping it in
a sorted order if retrieval of items by query, or having multiple fields
indexed.  Typed "tables"/dictionaries get inherent performance advantages
due to not requiring item boxing.

as a generic "pattern framework" for data structures without using classes:

DEFAULT =: ''

data dataconstructor DEFAULT  NB. dataconstructor is conjunction that will
return an adverb that is (conjunction data).  example

mydict = ('key1'; value1) dict DEFAULT  NB. an adverb that is a
conjunction bound to specific data, and where the conjunction code responds
to commands in list above top.

The list of commands near top of this message are actually numeric codes
that get passed to the bound datastructure adverb.

GET mydict becomes a verb that will retrieve items.
SET mydict returns an conjunction with m as key, n as value that will
return the same mydict adverb but with updated "data"
(newkey; SET) mydict returns an adverb that is above conjunction with m
bound as newkey
(newkey: newdata; SET) mydict directly returns the updated mydict adverb.

In the case of typed/consistent dictionaries, the internal data
representation is just an inverted table of "fields".  And while the
underlying conjunction of mydict is bound to data to form an adverb, a
generic (consistent typed) dictaccess conjunction can operate on any
inverted table if prebound with GET/SET.  And the GET/SET/OTHER "commands"
can form a verb as a result of paired with a generic access adverb, all
"command parameters" as x, and the inverted table/data structure as y.

What makes this approach have more appeal to be over classes is besides
issues like reference management  and it is hard to send methods to
class/objects in a "parameterized" way, is that arrays are J's
first/primary datastructure, and in some datastructures can be
transparently accessed by independent J code.

Generally, putting the complexity in modifiers instead of classes is a
functional approach I would prefer.  I can volunteer to start it off at
least if there is interest in this approach.

It would be a datastructure access "language/dsl" on top of J.




On Monday, January 31, 2022, 01:43:30 p.m. EST, Henry Rich <
henryhr...@gmail.com> wrote:





Quite right.  Jan-Pieter has at least a good start on the model.  What I
am suggesting is that the 'more integrated implementation' might not
need to be much more integrated than the J script.  Searching and
sorting are already J primitives.

The deficiency in J is that m&i. gives you a hashtable for searching m,
but if you modify m you have to recalculate the hash from scratch.  This
makes m&i. a good read-mostly Dictionary but slow for frequent updates.
If we can refine the model to the point that such inefficiency is the
worst problem we have, a little integrated support could finish the
package.

Henry Rich

On 1/31/2022 1:37 PM, Eric Iverson wrote:
A good and complete model is the first step. Then it is a matter of how
much it is used and what drawbacks it might have that would be addressed
by
a more integrated implementation.

On Mon, Jan 31, 2022 at 1:27 PM 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
----------------------------------------------------------------------
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

Reply via email to