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

Reply via email to