Thanks Devon... you wrote the VSCode J-plugin then? Amazing stuff, using it right now!
I am just extending my SDL stuff to use IMG_ and TTF_ functions but will def. read those pages like a Hawk tomorrow! Thank you Sean On Wed, 9 Dec 2020 at 22:58, Devon McCormick <[email protected]> wrote: > I put together what I wrote about this on a J wiki page: > https://code.jsoftware.com/wiki/NYCJUG/2020-12-08#Data_structures_in_J. > I've updated it with a link to Ric's code as well as a link to a nontrivial > example of my own where I use six vectors, which can be segregated in a > namespace, to represent information about files and their directory > structure. > > Anyone who has ideas about this topic should feel free to update the page. > > > > On Wed, Dec 9, 2020 at 5:26 PM Ric Sherlock <[email protected]> wrote: > > > In case it is of interest to others I thought I'd mention the following > > addon that I use to help me move data back and forth from C structs to J. > > > > https://github.com/tikkanz/data_struct > > > > On Tue, Dec 8, 2020 at 10:46 PM emacstheviking <[email protected]> > wrote: > > > > > Thanks Devon. > > > Most helpful. I am a seasoned C/C++ programmer but a total newbie with > J. > > > I've surprised myself thus far by getting a working SDL2 and Postgres > > > (libpq) wrapper up and running but they are more FFI code than > idiomatic > > J. > > > > > > I am having the same sorts of thoughts as I did when I first learned > Lisp > > > decades ago; how do you "do" anything! C has 'struct' but raw Lisp and > > > car/cdr etc are more than enough in most cases provided the list order > is > > > well documented but I guess you can say that about anything. > > > > > > Thank you again, I guess the only way to find out is to actually cut > some > > > code. > > > Next change I get I shall attempt my "rolling star field" effect within > > an > > > SDL2 window., > > > > > > Sean. > > > > > > > > > On Mon, 7 Dec 2020 at 17:01, Devon McCormick <[email protected]> > wrote: > > > > > > > Hi - > > > > As others have already indicated, J is most efficient with unboxed, > > > simple > > > > homogenous arrays. That said, it would be helpful to have an example > > of > > > a > > > > data structure, maybe one you have in C or C++, that you would like > to > > > > implement in J. > > > > > > > > Looking around, here is one of the more complex ones I found in C++ > > (from > > > > https://codescracker.com/cpp/cpp-data-structures.htm): > > > > > > > > struct stud > > > > { > > > > int rollno; > > > > char name[20]; > > > > char branch[3]; > > > > char batch[2]; > > > > float marks[5]; > > > > char grade; > > > > }stud_var; > > > > > > > > This has two numeric and four character fields so may make us think > we > > > > should use a boxed array, maybe like this: > > > > > > > > students=. ,:101;'Joe Blow';'BAT';'FR';60 70 85 96.8 9;'B' > > > > NB. Use ",:" to give us a one-row table > > > > students=. students,202;'Cruella De Ville';'DOG';'SO';91 92 93 94 > > > 89;'A' > > > > students=. students,303;'Christopher Xavier > Columbus';'EXP';'JR';14 > > > > 92 10 15 0;'F' > > > > > > > > We should specify the labels of each field: > > > > labels=. 'rollno';'name';'branch';'batch';'marks';'grade' > > > > > > > > So we can use them like this: > > > > > > > > students{"1~labels i. <'name' > > > > +--------+----------------+---------------------------+ > > > > |Joe Blow|Cruella De Ville|Christopher Xavier Columbus| > > > > +--------+----------------+---------------------------+ > > > > > > > > Alternatively, we could build this data structure using unboxed > arrays > > > > with distinct names in a namespace: > > > > > > > > rollno_students_=. 101 202 303 > > > > name_students_=. >20{.&.>'Joe Blow';'Cruella De > Ville';'Christopher > > > > Xavier Columbus' > > > > branch_students_=. 'BAT','DOG',:'EXP' > > > > batch_students_=. 'FR','SO',:'JR' > > > > marks_students_=. 60 70 85 96.8 9,91 92 93 94 89,:14 92 10 15 0 > > > > grade_students_=. 'BAF' > > > > > > > > Notice how I now enforce the length limitations that the original C++ > > > > example imposed, which is one of the things I dislike about these > more > > > > primitive languages: they force you to make data structure decisions > > > > in advance of the actual data. > > > > > > > > name_students_ > > > > Joe Blow > > > > Cruella De Ville > > > > Christopher Xavier C > > > > > > > > This length limitation does allow us to use simpler, unboxed, data > > > > structures. Of course, we don't have to fix the maximum length in > > > > advance in J: > > > > > > > > ]name_students_=. 'Joe Blow','Cruella De Ville',:'Christopher > > > > Xavier Columbus' > > > > Joe Blow > > > > Cruella De Ville > > > > Christopher Xavier Columbus > > > > > > > > It depends on how closely you wish to mimic the C++ or what > trade-offs > > > > you want to make. > > > > > > > > The unboxed arrays are often more efficient to process but the boxed > > > > ones are more flexible, e.g.what if the number of "marks" varies > > > > substantially from student to student? > > > > > > > > Also, boxed arrays can be quite efficient. As a rule of thumb, you > > > > don't want to box very small things as each box incurs the overhead > of > > > > a pointer; for large things, say full names or paragraphs, the > > > > overhead is amortized. > > > > > > > > I hope this helps, > > > > > > > > Devon > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Sun, Dec 6, 2020 at 9:40 PM Jimmy Gauvin <[email protected]> > > > > wrote: > > > > > > > > > Hi, > > > > > > > > > > for some examples of J coding you can look at : : > > > > > > > > > > https://github.com/jitwit/aoc > > > > > > > > > > I found his site while playing at Advent of Code. > > > > > > > > > > > > > > > Jimmy > > > > > > > > > > > > > > > > > > > > > > > > > On Sun, Dec 6, 2020 at 7:44 PM bill lam <[email protected]> > wrote: > > > > > > > > > > > you can use OOP class, object. They are implemented with locale. > > This > > > > is > > > > > > close enough to C structure. See labs. > > > > > > > > > > > > > > > > > > > > > > > > On Mon, Dec 7, 2020, 5:53 AM emacstheviking <[email protected]> > > > wrote: > > > > > > > > > > > > > Rob and Raul.. > > > > > > > > > > > > > > Thanks chaps for the comments...the first thing I need to do is > > > write > > > > > > > -something- that does something and then go from there. > > > > > > > It's not really a maths problem... well, in a way everything is > > > > maths I > > > > > > > guess but I am wanting to learn J and to write a game with it > and > > > > > that's > > > > > > > pretty much it. > > > > > > > > > > > > > > I'll post some progress somewhere someday... > > > > > > > > > > > > > > Thanks again > > > > > > > Sean > > > > > > > > > > > > > > > > > > > > > On Sun, 6 Dec 2020 at 21:41, 'Rob Hodgkinson' via Programming < > > > > > > > [email protected]> wrote: > > > > > > > > > > > > > > > Sean, the data structures in J work brilliantly for > > mathematical > > > > > array > > > > > > > > type problems. > > > > > > > > > > > > > > > > When the data framework you are seeking is more “structured” > > > (akin > > > > > to > > > > > > > > Tables and Columns, or Keys and Values), then a more suited > > > > structure > > > > > > > might > > > > > > > > require “jdb” for example (which makes use of boxing > “tuples”). > > > > > > > > This is a J compatible structured database for tables and > > > columns. > > > > > > > > > > > > > > > > It really depends on the problem you are solving, for example > > for > > > > > > Advent > > > > > > > > of Code or other coding challenges they are usually > > mathematical > > > in > > > > > > > nature > > > > > > > > and the J arrays are perfect, as they can be rectangular > arrays > > > > > > (matrices > > > > > > > > etc) or nested arrays (boxed) so there is a lot of > flexibility. > > > > > > > > > > > > > > > > With that in mind, I suggest learn the tools and then > consider > > > the > > > > > > > > structure depending on the nature of the problem, but they > are > > > > pretty > > > > > > > well > > > > > > > > all there for you to use. > > > > > > > > > > > > > > > > HTH Rob > > > > > > > > > > > > > > > > > On 7 Dec 2020, at 7:50 am, emacstheviking < > [email protected] > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > Hauke, > > > > > > > > > Thanks for your comments. I have been scribbling notes on > > howto > > > > go > > > > > > > about > > > > > > > > > it, my initial thoughts are that I need: > > > > > > > > > > > > > > > > > > genstar =: 3 : 0 > > > > > > > > > generates an array of random numbers: initial x, initial > > y, > > > > dy, > > > > > > type > > > > > > > > > > > > > > > > > > updstar =: 3 : 0 > > > > > > > > > in-place updates y by adding dy*timer interval > > > > > > > > > if y is off screen then randomly reset this entry with > y=0 > > > > > > > > > > > > > > > > > > Ha! This is going to be a lot of fun... > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Sun, 6 Dec 2020 at 20:36, Hauke Rehr < > > > [email protected]> > > > > > > > wrote: > > > > > > > > > > > > > > > > > >> If the atoms of x, y and dy are all numbers (or tuples > > > > thereofª), > > > > > > > > >> you can use a 3(or moreª)×(whatever common shape they > have) > > > > array. > > > > > > > > >> Index into them along the correct axes, and you’ll get > > > > > > > > >> back (or modify) a triplet (or triplets) (again, or > moreª). > > > > > > > > >> > > > > > > > > >> And updating ought to be done in place as much as > possible. > > > > > > > > >> You don’t do updating most of the time, but when you need > > to, > > > > > > > > >> do it in place if at all possible. > > > > > > > > >> You’re guaranteed to work in place if you immediately > assign > > > > > > > > >> back to the name of the structure you amend, for example. > > > > > > > > >> Also, take a look at the special combinations. > > > > > > > > >> Personally, I avoid boxing as much as possible. > > > > > > > > >> > > > > > > > > >> Then again, that’s just my thoughts and I’m far from > > > > > > > > >> as experienced as the average person on this list, I > guess. > > > > > > > > >> > > > > > > > > >> Am 06.12.20 um 21:13 schrieb emacstheviking: > > > > > > > > >>> What's the conventional wisdom / best practice on > defining > > > data > > > > > > > > >> structures > > > > > > > > >>> for an application? > > > > > > > > >>> > > > > > > > > >>> Given there is no explicit keyword/operator support like > C > > > > > (typdef, > > > > > > > > >>> struct) is it merely a case of convention and using > boxed > > > > > > > structures. > > > > > > > > I > > > > > > > > >>> have read several operators that can modify structures > both > > > as > > > > > new > > > > > > > > >> aliased > > > > > > > > >>> copies and in-place modifications but I do not have the > > > > > experience > > > > > > > > with J > > > > > > > > >>> to know what's efficient at run time in time / memory > etc. > > > > > > > > >>> > > > > > > > > >>> My specific use case is that of a vertically scrolling > star > > > > > > field... > > > > > > > I > > > > > > > > >>> intend to recreate and hopeful extend the tiny little > game > > I > > > > > wrote > > > > > > > but > > > > > > > > >>> never finished, screenshot here: > > > > > > > > >>> http://seancharles.xyz/posts/2019-10-06-all-at-c.html > > > > > > > > >>> > > > > > > > > >>> In that I had a struct that had the x, y, dy and type > > values > > > > but > > > > > it > > > > > > > > seems > > > > > > > > >>> to me that given that J is all about arrays, it might be > > more > > > > > > > efficient > > > > > > > > >>> using parallel arrays i.e. x array, y array, dy array > etc. > > > > > > > > >>> > > > > > > > > >>> Also, given that the state is being updated in a tight > > event > > > > loop > > > > > > > using > > > > > > > > >> the > > > > > > > > >>> time differential between frames to calculate the step > > motion > > > > > (i.e. > > > > > > > CPU > > > > > > > > >>> speed independently), what are your thoughts on immutable > > > > updates > > > > > > > > >> producing > > > > > > > > >>> new arrays or updating in place ? > > > > > > > > >>> > > > > > > > > >>> Thanks, > > > > > > > > >>> Sean. > > > > > > > > >>> > > > > > > > > > > > > ---------------------------------------------------------------------- > > > > > > > > >>> For information about J forums see > > > > > > > http://www.jsoftware.com/forums.htm > > > > > > > > >>> > > > > > > > > >> > > > > > > > > >> -- > > > > > > > > >> ---------------------- > > > > > > > > >> mail written using NEO > > > > > > > > >> neo-layout.org > > > > > > > > >> > > > > > > > > >> > > > > > > > > > ---------------------------------------------------------------------- > > > > > > > > >> 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 > > > > > > > > > > > > > > > > > -- > > > > > > > > Devon McCormick, CFA > > > > > > > > Quantitative Consultant > > > > > ---------------------------------------------------------------------- > > > > 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 > > > > > -- > > Devon McCormick, CFA > > Quantitative Consultant > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
