Empty means no atoms.  No question about it.

Perhaps we need a word for 'itemless'. Most of the time in my code I test for items rather than atoms.

Henry Rich

On 6/10/2017 12:38 AM, Ian Clark 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

Reply via email to