I used dictionary objects in Visual Basic (Access) to report similarity in text strings based on trigram usage. The keys were the distinct 3-letter combinations; the values were the incremented hit counts. It was both efficient and effective. But I think there is a better array approach in J.
> On 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