[Jprogramming] Empty lists?
Henry Rich
henryhrich at gmail.com
Fri Jun 9 02:44:03 UTC 2017
This is great - would you be willing to add it to NuVoc? Perhaps as
Vocabulary/EmptyArrays? If you do, I'll point the main NuVoc page to it.
Henry Rich
On 6/8/2017 10:35 PM, Devon McCormick wrote:
> J's treatment of empty arrays is thoroughly logical and consistent but it's
> probably more instructive to look at the shapes of results rather than at
> the results themselves, since a lot of empty arrays "look" the same though
> their shapes clearly differ:
>
> 0 0 0$99 NB. 3-D empty array
> 9 0 0$99 NB. 3-D empty array
>
> At the risk of obfuscating rather than clarifying, here are some
> progressions from non-empty to empty arrays - the point here is that not
> all empty arrays are the same. Any array with zero as at least one of its
> dimensions is empty but may have a different shape than another empty array.
>
> $i.2 NB. 2-element vec
> 2
> $1}.i.2 NB. Drop 1 element from 2-element vec
> 1
> $2}.i.2 NB. Drop 2 elements from 2-element vec
> 0
> $3}.i.2 NB. Drop 3 elements from 2-element vec
> 0 NB. -> empty vector
>
> $i.2 2 NB. 2x2 mat
> 2 2
> $1}.i.2 2 NB. Drop 1 row from 2x2 mat
> 1 2
> $2}.i.2 2 NB. Drop 2 rows from 2x2 mat
> 0 2 NB. -> mat with no rows
> $3}.i.2 2 NB. Drop 3 rows from 2x2 mat
> 0 2
>
> $1}."1 i.2 2 NB. Drop 1 column from 2x2 mat
> 2 1
> $2}."1 i.2 2 NB. Drop 2 columns from 2x2 mat
> 2 0 NB. -> mat with no columns
> $3}."1 i.2 2 NB. Drop 3 columns from 2x2 mat
> 2 0
>
> <'' NB. Boxed empty
> ++
> ||
> ++
> $<'' NB. Boxed empty is a scalar
>
> '' -: $<'' NB. Boxed empty is a scalar
> 1
> (i.0) -: $<'' NB. Boxed empty is a scalar
> 1
> $,<'' NB. 1-element boxed empty
> 1
> a: -: <'' NB. "Ace" is equivalent to boxed empty
> 1
>
> 2$a: NB. 2-element vector of boxed empties
> +++
> |||
> +++
> $2$a: NB. 2-element vector
> 2
> $1}.2$a: NB. Drop 1 element from 2-element vector
> 1
> 1}.2$a: NB. Drop 1 element from 2-element vector
> ++
> ||
> ++
> $2}.2$a: NB. Drop 2 elements from 2-element vector
> 0 NB. -> empty vector
> '' -: 2}.2$a: NB. Empty vector
> 1
> '' -: 2}. i.2 NB. Empty vector
> 1
> '' -: 2}. i.2 2 NB. Not empty vector: 0x2 mat
> 0
> (0 2$'hi') -: 2}. i.2 2
> 1
>
> Obligatory empty array joke:
> A man sits down in a diner and asks for coffee with no cream. The
> waitress replies, "I'm sorry, sir. We're out of cream. Would you like
> your coffee with no milk?"
>
>
>
> On Wed, Jun 7, 2017 at 1:03 PM, Michael Rice <limitcase at gmail.com> wrote:
>
>> @robert therriault
>>
>> my_empty =: }. 1
>>
>> my_empty
>>
>>
>> f my_empty
>>
>> 1
>>
>> < my_empty
>>
>> ┌┐
>>
>> ││
>>
>> └┘
>>
>>
>> An empty box?
>>
>>
>> I'm beginning to see the problem I was thinking of doing in J is ill-suited
>> to the language. It could be done, as it could in any computer language,
>> but the solution would be pretty kludgy.
>>
>>
>> I'll soon think of something else on which to apply J. It's already
>> invading my sleep. Going through exercises is no way to get into a
>> language. One needs a problem on which to focus it. I've been wanting to
>> explore cryptography more deeply, and J seems ideal for it.
>>
>>
>> Thanks to all,
>>
>>
>> Michael
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> On Wed, Jun 7, 2017 at 12:01 PM, robert therriault <bobtherriault at mac.com>
>> wrote:
>>
>>> I'm going to look at these results through the lens of Shape ($)
>>>
>>> f =: (1&,)
>>> f 2
>>> 1 2
>>> $ f 2 NB. shape is 2
>>> 2
>>> f ''
>>> 1
>>> $ f '' NB. shape is 1
>>> 1
>>> empty NB. it is a verb in my environment
>>> (i.0 0)"_
>>> f empty
>>> f empty NB. result of two verbs and no arguments is just the two verbs
>>> f empty 2 NB. this is where you expect to have a 1 returned
>>>
>>> $ f empty 2 NB. shape is 1 0
>>> 1 0 NB. one line of no items means no display
>>>
>>> I think it is the second dimension of EMPTY as opposed to NULL that is
>>> tripping you up.
>>>
>>> NULL=.''
>>> $ NULL
>>> 0
>>> EMPTY
>>> $EMPTY
>>> 0 0
>>> EMPTY-:empty 1
>>> 1
>>>
>>> In answer to your most recent question Michael, I would say just make
>> sure
>>> that the empty list that you pass is the right shape.
>>>
>>> Cheers, bob
>>>
>>>> On Jun 7, 2017, at 8:48 AM, Raul Miller <rauldmiller at gmail.com> wrote:
>>>>
>>>> empty is a verb
>>>> f is a verb
>>>>
>>>> so f empty is a verb (a hook)
>>>>
>>>> f=: 1&,
>>>> (f empty) 3
>>>>
>>>>
>>>>
>>>> $(f empty) 3
>>>> 3 0
>>>> $(f empty) 5
>>>> 5 0
>>>>
>>>> The reasons for this are documented at
>>>> http://www.jsoftware.com/help/dictionary/dictf.htm (hooks) and
>>>> http://www.jsoftware.com/help/dictionary/d630n.htm (x m&v y).
>>>>
>>>> That said, verbs take arguments and empty is a verb - it always
>>>> produces an empty result, but only when it gets an argument.
>>>>
>>>> I hope this helps,
>>>>
>>>> --
>>>> Raul
>>>>
>>>>
>>>> On Wed, Jun 7, 2017 at 11:39 AM, Michael Rice <limitcase at gmail.com>
>>> wrote:
>>>>> Oops! Guess I creamed empty. Will close and regen Jqt before
>> proceeding.
>>>>> Done!
>>>>>
>>>>> f =: (1&,)
>>>>> f 2
>>>>> 1 2
>>>>> f empty
>>>>> f empty
>>>>>
>>>>> Shouldn't it have returned
>>>>>
>>>>> 1
>>>>>
>>>>> ?
>>>>>
>>>>> On Wed, Jun 7, 2017 at 11:22 AM, robert therriault <
>>> bobtherriault at mac.com>
>>>>> wrote:
>>>>>
>>>>>> One thing to remember is that empty is already defined as a verb
>>>>>>
>>>>>> empty
>>>>>> (i.0 0)"_
>>>>>>
>>>>>> So if you overwrite this you may break some code if you have
>> previously
>>>>>> relied on the existing verb definition.
>>>>>>
>>>>>> I think along the lines that Pascal mentioned that null could be
>>> similarly
>>>>>> defined as
>>>>>>
>>>>>> null NB. check that it is not already used
>>>>>> |value error: null
>>>>>> null=:(i.0)"_
>>>>>> NULL NB. check that it is not already used - uppercase for global
>>>>>> nouns is a convention I like and is often seen in J code
>>>>>> |value error: NULL
>>>>>> NULL=:'' NB. I use this as the null string (same as what John
>>> suggested)
>>>>>> NULL-:null 2 NB. any argument produces NULL from null
>>>>>> 1
>>>>>>
>>>>>> Hope this helps,
>>>>>>
>>>>>> Cheers, bob
>>>>>>
>>>>>>> On Jun 7, 2017, at 8:09 AM, 'Jon Hough' via Programming <
>>>>>> programming at jsoftware.com> wrote:
>>>>>>>
>>>>>>> I may be wrong in doing this, but I usually write
>>>>>>> empty=: ''
>>>>>>> to signify an empty list, array, matrix etc.
>>>>>>>
>>>>>>>
>>>>>>> On Jun 7, 2017, 23:59, at 23:59, Michael Rice <limitcase at gmail.com>
>>>>>> wrote:
>>>>>>>> Is there a special "noun" for an empty list?
>>>>>>>>
>>>>>>>> Creating one seems enigmatic.
>>>>>>>>
>>>>>>>> empty =: 1 2
>>>>>>>> empty
>>>>>>>> 1 2
>>>>>>>> empty =: }. empty
>>>>>>>> empty
>>>>>>>> 2
>>>>>>>> empty =: }. empty
>>>>>>>> empty
>>>>>>>>
>>>>>>>> empty1 =:
>>>>>>>> |syntax error
>>>>>>>> | empty1=:
>>>>>>>> ------------------------------------------------------------
>>> ----------
>>>>>>>> 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
>>
>
>
---
This email has been checked for viruses by AVG.
http://www.avg.com
More information about the Programming
mailing list