Too esoteric and too application specific.

Thanks,

-- 
Raul

On Saturday, June 10, 2017, 'Pascal Jasmin' via Programming <
[email protected]> wrote:

> Beyond just having no items, a more important consideration in defining
> empty is what happens when you append to it.
>
> The empty table (i.0 0) or empty vector or scalar (i.0) are the two real
> world candidates for coding empty.  And both are appropriate "empty
> initializations" for setting up an appendable data structure.
>
>
> While its very common to care about whether data has no items or not, in
> data applications there is a useful difference between null (unassigned)
> and nothing/empty (assigned), including applications for merging edits
> (nulls do not override data, empty does).
>
> J offers unlimited coding options for various forms of nothingness.  For
> example i.0 1 (can be used for errors or type codes for other values
> (boxes) in the same variable, or for the above "data merge" rules.
>
> The shorter way to make my main point, is that intializations mostly in
> the context of append is the relevant use of empty for your application.
> Where append does not apply, but a distinction with null might, i.0 0 seems
> like a fair choice.
>
> But we could also standardize on i.0 0 0, or i.0 1 as a code independent
> of append behaviour.  Though, I expect the consensus is that these issues
> are too esoteric to need a general framework.
>
>
> ________________________________
> From: Ian Clark <[email protected] <javascript:;>>
> To: [email protected] <javascript:;>
> Sent: Saturday, June 10, 2017 12:38 AM
> Subject: Re: [Jprogramming] Empty lists?
>
>
>
> It's a nice point: is a noun "empty" because it has no atoms – or because
>
> it has no items?
>
>
> My appeal for "a reliable test for emptiness" was not an invitation to post
>
> code, but invite the community to reach a consensus on this, for inclusion
>
> in a proposed NuVoc page.
>
>
> I hadn't meant to divert the discussion away from what IMO is the topic:
>
> helping a beginner correctly handle an empty noun (and/or empty list).
>
>
> Speaking for myself, in the past I've used both Jasmin's and Raul's test of
>
> emptiness, depending whether I was coding a generalized utility, or solving
>
> a real-world problem. Which is not far off what Raul has just said.
>
>
> I guess my meaning of "empty" ought to be NuVoc's, which you can read in:
>
>   http://code.jsoftware.com/wiki/Vocabulary/Glossary#Empty
>
> …i.e. "no atoms".
>
>
> Does it matter?
>
>
> A newcomer to J might be forgiven for thinking it's "Much Ado About
>
> Nothing", as someone posted earlier. I'd disagree. It's fundamentally
>
> important – and I mean "fundamentally" – all about foundations – not just a
>
> long word for "very". Was it Knuth who first identified the "null case"
>
> (…did he call it?) as a large, important and massively wasteful class of
>
> bug? Older programmers will point me at a good reference.
>
>
> It follows that NuVoc ought to have a big bold answer to questions about
>
> empty nouns. It doesn't. (At least, not bold enough). As a newcomer I'd
>
> expect to find: Vocabulary/EmptyNouns or /EmptyLists in:
>
>   http://code.jsoftware.com/wiki/NuVoc#bottomrefs
>
>
> @Raul – if you're not going to write it, are you happy for me to do so,
>
> using what you've posted in this thread? It won't be for a week or two
>
> because I'm snowed under and I don't know why I'm volunteering for this.
>
> Out of embarrassment, maybe.
>
>
> Obligatory null-case joke (with apologies to Raul)…
>
>
> BANK MANAGER: Why did you write the IRS a check for $0-00?
>
>
> CUSTOMER: They said they needed it for the good of their system.
>
>
> BANK MANAGER: Whaddya think it's done to OUR system?
>
>
>
>
>
> On Fri, Jun 9, 2017 at 12:41 PM, Raul Miller <[email protected]
> <javascript:;>> wrote:
>
>
> > I'm not sure I completely agree:
>
> >
>
> >    i. 1 0 1
>
> >    0 < # i. 1 0 1
>
> > 1
>
> >    0 < # 3
>
> > 1
>
> >
>
> > For the general case of emptiness, the reliable test would be 0 e. $
>
> >
>
> > That said, checking for zero items (or more than zero items) is often
>
> > quite convenient.
>
> >
>
> > Thanks,
>
> >
>
> > --
>
> > Raul
>
> >
>
> >
>
> > On Fri, Jun 9, 2017 at 7:36 AM, 'Pascal Jasmin' via Programming
>
> > <[email protected] <javascript:;>> wrote:
>
> > > the reliable test for emptiness is (0 < #)
>
> > >
>
> > >
>
> > >
>
> > >
>
> > > ________________________________
>
> > > From: Ian Clark <[email protected] <javascript:;>>
>
> > > To: [email protected] <javascript:;>
>
> > > Sent: Thursday, June 8, 2017 11:15 PM
>
> > > Subject: Re: [Jprogramming] Empty lists?
>
> > >
>
> > >
>
> > >
>
> > > Henry, I absolutely agree.
>
> > >
>
> > > Only last night I was thinking NuVoc lacked an in-depth treatment of
>
> > empty
>
> > > lists (/tables) – and how it was a serious omission. (It does have
>
> > > Vocabulary/EmptyArguments --which overlaps slightly.)
>
> > >
>
> > > Devon's treatment fits the bill.
>
> > >
>
> > > Might also need a reliable test for emptiness, to discourage use of:
> if.
>
> > y
>
> > > -: '' do. …
>
> > >
>
> > > On Fri, Jun 9, 2017 at 3:44 AM, Henry Rich <[email protected]
> <javascript:;>> wrote:
>
> > >
>
> > >> 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 <[email protected]
> <javascript:;>>
>
> > 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 <
>
> > >>>> [email protected] <javascript:;>>
>
> > >>>> 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 <[email protected]
> <javascript:;>>
>
> > 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 <
> [email protected] <javascript:;>>
>
> > >>>>>>
>
> > >>>>> 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 <
>
> > >>>>>>>
>
> > >>>>>> [email protected] <javascript:;>>
>
> > >>>>>
>
> > >>>>>> 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 <
>
> > >>>>>>>>>
>
> > >>>>>>>> [email protected] <javascript:;>> 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 <
>
> > [email protected] <javascript:;>>
>
> > >>>>>>>>>
>
> > >>>>>>>> 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
>
> > >
>
> > >>
>
> > >> ------------------------------------------------------------
> ----------
>
> > >> 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

Reply via email to