A simple use case which resembles the German-English dictionary is to implement variable-value bindings in a small interpreter. I've run into this many times in what I've been doing lately.
Cheers, Louis > On 18 Nov 2019, at 19:38, Raul Miller <rauldmil...@gmail.com> wrote: > > Dictionaries might provide a useful optimization for compression algorithms > > For example: https://rosettacode.org/wiki/LZW_compression#J > > See also: > https://en.wikipedia.org/wiki/DEFLATE > https://en.wikipedia.org/wiki/LZ77_and_LZ78 > https://en.wikipedia.org/wiki/Prediction_by_partial_matching > https://en.wikipedia.org/wiki/Burrows%E2%80%93Wheeler_transform > > Thanks, > > > -- > Raul > > >> On Mon, Nov 18, 2019 at 1:15 PM Devon McCormick <devon...@gmail.com> wrote: >> >> I would like to see examples of where a dictionary would be the preferred >> way of dealing with some data. Does anyone know of any, not necessarily in >> J, that are short and to the point? >> >> >> On Mon, Nov 18, 2019 at 1:02 PM Danil Osipchuk <danil.osipc...@gmail.com> >> wrote: >> >>> I quickly put together a minimal implementation along those lines, to have >>> a subject for a discussion regarding performance and general usage >>> An object 'Map has a hash list mapping hash value to other 2 lists -- boxed >>> lists of boxed keys (per hash value) and boxed lists of boxed values. >>> >>> It is not thoroughly tested and not well thought through about argument >>> boxing and ranks, but should be pretty close to what would be a >>> straightforward implementation of the thing. >>> 'get_Map key' should give a boxed value for a key or raise a error if key >>> is absent >>> 'somevalue get_Map key' should give a stored value or save and return >>> somevalue if key is not there (but I can not catch an exception raised in a >>> monad called from a dyad - something silly, but have to go home) >>> 'key put__Map value' stores a value >>> 'delkey__Map key' removes a key if there >>> >>> M=: 0 conew'map' >>> >>> 123 put__M 1230 >>> >>> 1230 >>> >>> 'strkey' put__M 'strval' >>> >>> strval >>> >>> (<'boxkey') put__M <'boxval' >>> >>> ┌──────┐ >>> >>> │boxval│ >>> >>> └──────┘ >>> >>> keys__M >>> >>> ┌─────┬────────┬──────────┐ >>> >>> │┌───┐│┌──────┐│┌────────┐│ >>> >>> ││123│││strkey│││┌──────┐││ >>> >>> │└───┘│└──────┘│││boxkey│││ >>> >>> │ │ ││└──────┘││ >>> >>> │ │ │└────────┘│ >>> >>> └─────┴────────┴──────────┘ >>> >>> hashes__M >>> >>> _1845511330 2120780259 _71755953 >>> >>> values__M >>> >>> ┌──────┬────────┬──────────┐ >>> >>> │┌────┐│┌──────┐│┌────────┐│ >>> >>> ││1230│││strval│││┌──────┐││ >>> >>> │└────┘│└──────┘│││boxval│││ >>> >>> │ │ ││└──────┘││ >>> >>> │ │ │└────────┘│ >>> >>> └──────┴────────┴──────────┘ >>> >>> get__M 123 >>> >>> ┌────┐ >>> >>> │1230│ >>> >>> └────┘ >>> >>> get__M 'not there' >>> >>> |uncaught throw.: get__M >>> >>> | get__M'not there' >>> >>> 'to set to something' get__M 'not there' >>> >>> |uncaught throw.: get >>> >>> | get y >>> >>> delkey__M 123 >>> >>> 1 >>> >>> get__M 123 >>> >>> |uncaught throw.: get__M >>> >>> | get__M 123 >>> >>> values__M >>> >>> ┌────────┬──────────┐ >>> >>> │┌──────┐│┌────────┐│ >>> >>> ││strval│││┌──────┐││ >>> >>> │└──────┘│││boxval│││ >>> >>> │ ││└──────┘││ >>> >>> │ │└────────┘│ >>> >>> └────────┴──────────┘ >>> >>> keys__M >>> >>> ┌────────┬──────────┐ >>> >>> │┌──────┐│┌────────┐│ >>> >>> ││strkey│││┌──────┐││ >>> >>> │└──────┘│││boxkey│││ >>> >>> │ ││└──────┘││ >>> >>> │ │└────────┘│ >>> >>> └────────┴──────────┘ >>> >>> пн, 18 нояб. 2019 г. в 16:10, Henry Rich <henryhr...@gmail.com>: >>> >>>> Right now I am thinking that the need for dictionaries could be met by a >>>> class whose instances are associative memories. Key, values, >>>> hashtables, chains if needed would be stored inside the instance. The >>>> interface would be simply x Put y and Get y. I reckon this would be >>>> fast enough without any special support from the interpreter beyond the >>>> hash calculation that is there now. >>>> >>>> Henry Rich >>>> >>>>> On 11/18/2019 6:10 AM, Danil Osipchuk wrote: >>>>> symbols are essentially names optimized for lookup and comparison, as >>>> such >>>>> they are useful to implement locales efficiently, if one to build an >>> map >>>>> using those as keys, indeed one gets something resembling K >>> dictionaries >>>>> http://www.math.bas.bg/bantchev/place/k.html : >>>>> >>>>> "Another distinguishing feature of K is the use of dictionaries: >>>>> associative tables whose keys are symbols, i.e., internalized strings. >>> In >>>>> turn, dictionaries are the building material of a hierarchically >>>> organized >>>>> global data space called the K-tree" >>>>> >>>>> https://github.com/kevinlawler/kona/wiki/Dictionaries >>>>> >>>>> This is important case of course, but still a restriction. Tables in >>> Lua >>>>> are more fundamental: >>>>> >>>>> "The table type implements associative arrays. An associative array is >>> an >>>>> array that can be indexed not only with numbers, but also with strings >>> or >>>>> any other value of the language, except *nil*. Moreover, tables have no >>>>> fixed size; you can add as many elements as you want to a table >>>>> dynamically. Tables are the main (in fact, the only) data structuring >>>>> mechanism in Lua, and a powerful one. We use tables to represent >>> ordinary >>>>> arrays, symbol tables, sets, records, queues, and other data >>> structures, >>>> in >>>>> a simple, uniform, and efficient way. Lua uses tables to represent >>>> packages >>>>> as well. When we write io.read, we mean "the read entry from the io >>>>> package". For Lua, that means "index the table io using the string >>> "read" >>>>> as the key". >>>>> >>>>> >>>>> >>>>> пн, 18 нояб. 2019 г. в 13:11, 'Mike Day' via Programming < >>>>> programm...@jsoftware.com>: >>>>> >>>>>> It's a long time since I played with s: - do J symbols have any >>>>>> relevance to dictionaries/directories? >>>>>> >>>>>> APL/J cousin, K, appears to have the dictionary as pretty central to >>> its >>>>>> data organisation, but maybe >>>>>> that's more akin to J's locales. >>>>>> >>>>>> Neither topic helpful probably relevant here, but might start a hare! >>>>>> >>>>>> Mike >>>>>> >>>>>>> On 18/11/2019 02:49, Henry Rich wrote: >>>>>>> In J I find myself coming back to simple arrays for most data >>>> structures. >>>>>>> >>>>>>> Trees can be represented as boxes containing subtrees. That works, >>>>>>> but is usually more trouble than simply managing an array. >>>>>>> >>>>>>> Linked lists are used only for efficiency, and in the cases where >>> that >>>>>>> matters you can easily have a list of indexes to an array of data >>>> items. >>>>>>> >>>>>>> Stacks are just lists, as Devon said. >>>>>>> >>>>>>> The datatype I really want is a directory object that acts as an >>>>>>> efficient and easy-to-use associative memory. You put key/values in >>>>>>> and then retrieve a value by presenting its key. Has anyone written >>>>>>> an addon for that? >>>>>>> >>>>>>> (Note: the primitive 128!:8 (create a hash for a noun) was added to >>>>>>> J9.01 with this in mind) >>>>>>> >>>>>>> Henry Rich >>>>>>> >>>>>>>> On 11/17/2019 8:16 PM, 'Bo Jacoby' via Programming wrote: >>>>>>>> I failed to communicate the links before, but here they are. >>>>>>>> Ordinal fractions are somewhat like infinite-dimensional arrays. >>>>>>>> >>>>>> >>>> >>> https://www.academia.edu/10031088/ORDINAL_FRACTIONS_-_the_algebra_of_data >>>>>>>> >>>>>>>> >>>>>>>> http://www.statemaster.com/encyclopedia/Ordinal-fraction >>>>>>>> Bo. >>>>>>>> >>>>>>>> Den søndag den 17. november 2019 22.07.28 CET skrev Devon >>>>>>>> McCormick <devon...@gmail.com>: >>>>>>>> Trees are simple to implement in J - >>>>>>>> https://code.jsoftware.com/wiki/User:Devon_McCormick/Trees - as are >>>>>>>> graphs >>>>>>>> - >>>>>>>> >>>>>> >>>> >>> https://code.jsoftware.com/wiki/NYCJUG/2009-11-10/BreadthFirstGraphTraversal >>>>>>>> . >>>>>>>> A stack is simple to implement too but I'm not sure why you would >>>>>>>> want to >>>>>>>> as it's simply a vector with very restrictive rules to manipulate >>> it. >>>>>>>> Linked lists make no sense in a language with dynamic arrays for >>> much >>>>>>>> the >>>>>>>> same reason since a linked list is mainly a way of implementing >>>> dynamic >>>>>>>> arrays but has benefit only in a language which lacks these >>> natively. >>>>>>>> >>>>>>>> On Sun, Nov 17, 2019 at 8:24 AM 'Bo Jacoby' via Programming < >>>>>>>> programm...@jsoftware.com> wrote: >>>>>>>> >>>>>>>>> ORDINAL FRACTIONS - the algebra of data >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> | >>>>>>>>> | >>>>>>>>> | >>>>>>>>> | | | >>>>>>>>> >>>>>>>>> | >>>>>>>>> >>>>>>>>> | >>>>>>>>> | >>>>>>>>> | | >>>>>>>>> ORDINAL FRACTIONS - the algebra of data >>>>>>>>> >>>>>>>>> This paper was submitted to the 10th World Computer Congress, IFIP >>>> 1986 >>>>>>>>> conference, but rejected by the referee.... >>>>>>>>> | >>>>>>>>> >>>>>>>>> | >>>>>>>>> >>>>>>>>> | >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> Den søndag den 17. november 2019 07.12.02 CET skrev Raul >>>> Miller < >>>>>>>>> rauldmil...@gmail.com>: >>>>>>>>> >>>>>>>>> Arrays are roughly analogous to computer memory. >>>>>>>>> >>>>>>>>> Put different: I think you are asking the wrong question. >>>>>>>>> >>>>>>>>> (Partially: it's worth thinking about why you pick whichever data >>>>>>>>> structures...) >>>>>>>>> >>>>>>>>> ((It can also sometimes be useful to look on rosettacode for >>>>>>>>> examples of >>>>>>>>> various daya structure handling mechanisms.)) >>>>>>>>> >>>>>>>>> Thanks, >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Raul >>>>>>>>> >>>>>>>>> On Sat, Nov 16, 2019 at 6:00 PM Jimmy Gauvin < >>> jimmy.gau...@gmail.com >>>>> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Hi, >>>>>>>>>> >>>>>>>>>> when dealing with data structures other than arrays such as trees, >>>>>>>>> graphs, >>>>>>>>>> stacks, linked lists what other programming language do you resort >>>>>>>>>> to ? >>>>>>>>>> >>>>>>>>>> Or do stick with J for all endeavours? >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Jimmy >>>>>>>>>> >>>> ---------------------------------------------------------------------- >>>>>>>>>> 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 >>> >> >> >> -- >> >> 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