[Jprogramming] delete item; ass. lists

Henry Rich henryhrich at gmail.com
Mon Dec 4 02:49:37 UTC 2017


Yeah, I found it, but it wouldn't be applicable here because it 
implemented a fixed-size hashtable and kept only the most recent entries 
(it was used as a lookaside buffer to speed negascout searches).

A simple hashtable wouldn't be hard to implement, methinks.

Henry Rich

On 12/3/2017 8:18 PM, Andrew Dabrowski wrote:
> Can you locate your code?
>
>
> On 12/03/2017 06:52 PM, Henry Rich wrote:
>> Yes; I've done that before.  It might be worth seeing how well we 
>> could make such an addon perform before making changes to the JE.
>>
>> Henry Rich
>>
>> On 12/3/2017 6:47 PM, bill lam wrote:
>>> Can this be implemented using j script addon?
>>>
>>> On Dec 4, 2017 5:26 AM, "Henry Rich" <henryhrich at gmail.com> 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 
>>>>>> <dabrowsa at indiana.edu>
>>>>>> 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=: ". at 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
>>
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm



More information about the Programming mailing list