Ok, so https://en.wikipedia.org/wiki/Associative_array rather than
https://en.wikipedia.org/wiki/Association_list?

For this, I think I'd use a pair of lists - one of keys, one of
values. Possibly I'd stick them in a pair of boxes so I could pretend
to be using a purely functional parameter system. But given the
emphasis on mutability here, I think I'd prefer to refer to them by
name. I'll think about this a bit and probably add a note to the
referenced rosettacode entry.

If I were adding a type to J, I'd probably want to borrow K's table
type (probably including deep ties to the assignment operations and
the part where you can transpose them to get a different
representation, though I'm not sure that |: would be the way to
achieve that kind of transpose).

Thanks,

-- 
Raul

On Sun, Dec 3, 2017 at 4:06 PM, Marshall Lochbaum <[email protected]> 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
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to