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
