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
