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
