Can this be implemented using j script addon?

On Dec 4, 2017 5:26 AM, "Henry Rich" <[email protected]> wrote:

> Perhaps we shouldn't try to make a full datatype for associative arrays,
> but just a set of functions (foreigns, or (m h.) ) that do what's needed.
>
> We would need to decide what's needed.
>
> hashtable =: keys create values
> indexes =: hashtable lookup keys (like i.)
> values =: hashtable fetch indexes   (like {)
> hashtable =: hashtable add keys;values
> hashtable =: hashtable delete indexes
>
> That would not be the hardest thing to implement; perhaps we should start
> a strawman in Interpreter/Requests.
>
> Henry Rich
>
>
> On 12/3/2017 4:06 PM, Marshall Lochbaum wrote:
>
>> The associative lists that Andrew is talking about (also called maps or
>> dictionaries) are essentially the same as JSON objects (more precisely,
>> JSON objects are maps whose keys are strings). There's no need for them
>> to be used in a particularly low-level way, although the primitives used
>> to manipulate them would have to be different from J's array primitives.
>> Examples might be combining two maps but giving preference to one of
>> them when they conflict, or inverting a map by swapping keys and values.
>>
>> Lisp stands for "list processing", and its fundamental datatype is the
>> linked list, composed of value-reference pairs. These aren't related to
>> associative arrays, at least not any more than they are related to any
>> other datatype.
>>
>> I feel pretty strongly that an associative array type is missing in J,
>> but it's understandable given how hard such a type would be to specify
>> and implement. That doesn't make it any easier to live without them,
>> though.
>>
>> Marshall
>>
>> On Sun, Dec 03, 2017 at 01:50:43PM -0500, Raul Miller wrote:
>>
>>> <<< means "box three times"
>>>
>>>     <2
>>> ┌─┐
>>> │2│
>>> └─┘
>>>     <<2
>>> ┌───┐
>>> │┌─┐│
>>> ││2││
>>> │└─┘│
>>> └───┘
>>>     <<<2
>>> ┌─────┐
>>> │┌───┐│
>>> ││┌─┐││
>>> │││2│││
>>> ││└─┘││
>>> │└───┘│
>>> └─────┘
>>>
>>> See also the documentation on the index operation (Henry gave you a
>>> reference for that).
>>>
>>> Also, as I understand it, JSON has only a loose relationship with
>>> a-lists. My understanding of them is that they are the fundamental
>>> datatype provided by the lisp / scheme / .. family of languages.
>>> Basically, you're working with pointer chasing. In J, you can use
>>> indices or names as references, if you want to build a workalike - but
>>> usually it's just not worth the bother.
>>>
>>> And that "encode" method is building a name based on an arbitrary
>>> string. You should probably think of it as a hash function. But
>>> there's a typo - there should be a space after the v in inv. But this
>>> suggests also that rosettacode is having bitrot issues with its
>>> storage system, and that has all sorts of unpleasant implications.
>>> Basically, you are not going to be able to use rosettacode
>>> implementations - in the general case - unless you are prepared to
>>> debug them (which kind of defeats the purpose of having the site in
>>> the first place.) ... wait, no.. when I go to that rosettacode page, I
>>> see a space after the 'inv' keyword. Well.. it could still be bitrot,
>>> but perhaps at the cloudfront level rather than on the site itself...
>>>
>>> Thanks,
>>>
>>> --
>>> Raul
>>>
>>>
>>>
>>> On Sun, Dec 3, 2017 at 1:24 PM, Andrew Dabrowski <[email protected]>
>>> wrote:
>>>
>>>> 1. Yes, I should been more specific: I wanted to know the idiomatic way
>>>> to
>>>> delete the nth item of a list, so I think <<< is what I was looking for.
>>>>
>>>> What is <<< called and where is it documented?
>>>>
>>>> 2. Not sure what you mean by "Their focus is on micromanaging the
>>>> sequence
>>>> of operations."  A-lists are built into just about every other modern
>>>> language because they're so useful at managing information.  Does J not
>>>> support JSON for web interoperability?
>>>>
>>>> One example is using an a-list as a structured object, without having
>>>> to get
>>>> into full-blown OO.  I could represent the state of a model using an
>>>> a-list
>>>> and then update the values over time.
>>>>
>>>> I saw that using classes is one alternative
>>>> (https://rosettacode.org/wiki/Associative_array/Creation#J).
>>>>
>>>> coclass'assocArray'
>>>>      encode=:'z',(a.{~;48  65  97(+ i.)&.>10  26  26)  {~62x
>>>> #.inv256x  #.
>>>> a.&i.
>>>>      get=: ".@encode
>>>>      has=:0  <: nc@<@encode
>>>>      set=:4  :'(encode x)=:y'
>>>>
>>>> I have absolutely no idea what is going on in the encode function. I
>>>> hope
>>>> there are other options.
>>>>
>>>>
>>>>
>>>> On 12/03/2017 12:59 PM, Raul Miller wrote:
>>>>
>>>>> Why do you want to delete an item from a list? This is *not* a
>>>>> rhetorical question - we have a variety of ways of removing items from
>>>>> lists and to pick the correct mechanism we need to understand what you
>>>>> are trying to accomplish.
>>>>>
>>>>> To illustrate, here are a few examples:
>>>>>
>>>>> list=: 2 3 4 5 7 8 9 10
>>>>>
>>>>>      NB. delete specific elements
>>>>>      list -. 3 5 7
>>>>> 2 4 8 9 10
>>>>>
>>>>>      NB. delete based on a computation
>>>>>      (0=1&p: list)#list
>>>>> 4 8 9 10
>>>>>
>>>>>      NB. delete based on a range of indices
>>>>>      (3&{.,6&}.) list
>>>>> 2 3 4 9 10
>>>>>
>>>>>      NB. delete values at certain indices
>>>>>      (<<<3 5 6){ list
>>>>> 2 3 4 7 10
>>>>>
>>>>> And then there's operations (like outfix) which offer regular
>>>>> abstractions:
>>>>>      3 ]\. list
>>>>> 5 7 8 9 10
>>>>> 2 7 8 9 10
>>>>> 2 3 8 9 10
>>>>> 2 3 4 9 10
>>>>> 2 3 4 5 10
>>>>> 2 3 4 5  7
>>>>>
>>>>> Note that "delete from a list" is a dual of "select from a list" -
>>>>> maybe a shift in perspective can help?
>>>>>
>>>>> As for the lack of "a-lists" - again, why do you want them? Depending
>>>>> on what you are trying to do, there's a lot of options. Their focus is
>>>>> on micromanaging the sequence of operations, though, so you should not
>>>>> expect the language to make most of your decisions for you, there
>>>>> (unless of course you are working with a language which was
>>>>> specifically designed with an "everything should be an a-list"
>>>>> mentality - but that's not J).
>>>>>
>>>>> Thanks,
>>>>>
>>>>> ----------------------------------------------------------------------
>>>> 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.
> http://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

Reply via email to