Note the addon 'general/misc/validate' contains the verb isempty. isempty 0: e. $
On Fri, Jun 9, 2017 at 3:15 PM, Ian Clark <[email protected]> wrote: > 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
