thank you Kip and Raul,

I settled on: 

booltest=: [: -. [: *./ 0 = ,

   booltest booltest S:0 a:;a: 
0 

  booltest booltest S:0 ] 3;a: 
1 



I'm not sure its a good general idea, but there is some clear use cases:

   +:^:(booltest i.0) 2 
2 
 (i.0) -:  +:^:(i.0) 2 
1 
   +:^:booltest 2 
4 



----- Original Message -----
From: Raul Miller <[email protected]>
To: Programming forum <[email protected]>
Cc: 
Sent: Sunday, May 11, 2014 7:53:35 PM
Subject: Re: [Jprogramming] testing for variations of false null empty

On Sun, May 11, 2014 at 5:08 PM, 'Pascal Jasmin' via Programming
<[email protected]> wrote:
> booltest =. (0<+./) *. 0<#
> is designed to return 0 for 0 0 0  and i.0, and hopefully this:
>   booltest i.0 0, but:
>
>   (i.0) -: booltest i.0 0
> 1
>
> the problem with all of this is:
>    3 : 'if. booltest i. 0 0 do. 1 else. 0 end.' 4
> 1
>
> so, it appears I need a 3 part test?  How would I write it?


   booltest=: [: */ 0 = ,

You do not care about rank or shape, so the argument needs to be raveled.

You want to test if values are zero, so that gives us 0 = ,

And you want to know if all of them are, so */ (or *./) combines them.
The empty case gets the identity value for * (or *.) which happens to
be what you want.

Thanks,

-- 
Raul
----------------------------------------------------------------------
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