Thanks Raul. It's in my in-tray to do.

Ian

On Sat, Jun 10, 2017 at 11:51 AM, Raul Miller <[email protected]> wrote:

> I'm totally fine with you writing up NuVoc entries, and using whatever
> I've written here to fuel them.
>
> Thanks,
>
> --
> Raul
>
>
> On Sat, Jun 10, 2017 at 12:38 AM, Ian Clark <[email protected]> wrote:
> > 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]>
> 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]> wrote:
> >> > the reliable test for emptiness is (0 < #)
> >> >
> >> >
> >> >
> >> >
> >> > ________________________________
> >> > From: Ian Clark <[email protected]>
> >> > To: [email protected]
> >> > 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]>
> 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]>
> >> 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]>
> >> >>>> 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]>
> >> 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]>
> >> >>>>>>
> >> >>>>> 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]>
> >> >>>>>
> >> >>>>>> 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]> 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]>
> >> >>>>>>>>>
> >> >>>>>>>> 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