" 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?" "
NB. :D COFFE=. i.2 2 MILK =. i.1 2 CREAM=. i.2 1 NB. Coffe with milk is not the same as coffe with cream (COFFE , MILK) -: (COFFE , CREAM) 0 NB. However, even if no milk is not the same as no cream, NOMILK =. MILK -. MILK NOCREAM=. CREAM -. CREAM NOMILK -: NOCREAM 0 NB. coffe with no milk is the same as coffe with no cream (COFFE , NOMILK) -: (COFFE , NOCREAM) 1 On Thu, Jun 8, 2017 at 10:35 PM, Devon McCormick <[email protected]> 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/forum > s.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 > > > > > > -- > > Devon McCormick, CFA > > Quantitative Consultant > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
