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