Perhaps:

   rad=: (#~ 1 - ] -:"1 |.!.__~&1)&.|:

Note that I have assumed that you will not be using negative infinity in B.

-- 
Raul

On Thu, Oct 4, 2012 at 8:12 PM, Linda Alvord <lindaalv...@verizon.net> wrote:
>  I think I only  need "ifany" .  But I could call it "ifempty" .
>
>   ifany=: ^:(*@#@])
>    rad=: 13 :'(1,-. 2-:/\|:y)#"1 y'
>    ]B=:2 4 $3 5 5 4 2 1 1 6
> 3 5 5 4
> 2 1 1 6
>    rad ifany B
> 3 5 4
> 2 1 6
>    rad ifany C=:''
>
>  Linda
>
> -----Original Message-----
> From: programming-boun...@forums.jsoftware.com
> [mailto:programming-boun...@forums.jsoftware.com] On Behalf Of Henry Rich
> Sent: Thursday, October 04, 2012 7:38 PM
> To: programm...@jsoftware.com
> Subject: Re: [Jprogramming] Why the length error?
>
> I use
>
>     ifany=: ^:(*@#@])
>     butifnull =: 2 : 'v"_`u@.(*@#@])'
>
>     rad ifany C
>
>     rad butifnull (2 0$0) C
>
> Henry Rich
>
> On 10/4/2012 7:22 PM, Linda Alvord wrote:
>> I just realized that all these choices, change B in some way.  I want
>> it to always be a two row table of pairs in columns.
>>
>>     B=:2 4 $3 5 5 4 2 1 1 6
>> 3 5 5 4
>> 2 1 1 6
>>
>>     ''$ B
>> 3 5 5 4
>>     {. B
>> 3 5 5 4
>>     0 { B
>> 3 5 5 4
>>     ,/ B
>> 3 5 5 4 2 1 1 6
>>
>> My only concern is when B happens to have no pairs, in which case I
>> want a result that is an empty array when rad is used.
>>
>> I'm glad I noticed these problems as they would have caused even more
> grief.
>>
>> Thanks for you continuing assistance.
>>
>> Linda
>>
>> -----Original Message-----
>> From: programming-boun...@forums.jsoftware.com
>> [mailto:programming-boun...@forums.jsoftware.com] On Behalf Of Raul
>> Miller
>> Sent: Thursday, October 04, 2012 11:34 AM
>> To: programm...@jsoftware.com
>> Subject: Re: [Jprogramming] Why the length error?
>>
>> Here are some options (I'm repeating concepts expressed by Roger Hui
>> and Devon McCormick:
>>
>>     L=: 1,''
>>     ''$ L
>>     {. L
>>     0 { L
>>     ,/ L
>>
>> Roger's suggestion is equivalent to the APL classic in this context,
>> but in the general case you would need to ravel the right argument if
>> L had a rank greater than 1 (APL's rho is like ($,) in J).
>>
>> {. L and ''$L and 0 { L do exactly the same thing, but the syntax is
>> different, which can be significant if you are building a train
>> (Roger's approach re-expresses nicely as a fork -- 0 { L is also nice
>> in a fork but since numbers stick to other numbers to form numeric
>> words it's not quite as nice as Roger's approach)..
>>
>> ,/ L is different -- the others will discard extra elements and always
>> reduce the rank of the result while ,/ removes a leading dimension but
>> never gets rid of any elements (so if you have multiple elements it
>> will not take you below rank 1).
>>
>> Anyways... simplest depends on you and where you are going.  And note
>> that there's other options also, depending... (+/L for example, would
>> also get you an atomic 1 in this case)..
>>
>> --
>> Raul
>>
>> On Thu, Oct 4, 2012 at 9:35 AM, Linda Alvord <lindaalv...@verizon.net>
>> wrote:
>>> This is the crux of the problem:
>>>
>>>     1,''
>>> 1
>>>     $1
>>>     $1,''
>>> 1
>>>
>>> What is the simplest way to make the shape of   1,''  be empty?
>>>
>>> Linda
>>>
>>>
>>>   -----Original Messapege-----
>>> From: programming-boun...@forums.jsoftware.com
>>> [mailto:programming-boun...@forums.jsoftware.com] On Behalf Of Ric
>>> Sherlock
>>> Sent: Thursday, October 04, 2012 2:40 AM
>>> To: programm...@jsoftware.com
>>> Subject: Re: [Jprogramming] Why the length error?
>>>
>>> This gives a length error because
>>>     (1,'') # ''
>>> |length error
>>> |   (1,'')    #''
>>>
>>> An simple solution to your problem is to returns the input on error:
>>>     rad=: (#~ [: -. 0 , 2 -:/\ ])@|: :: ]
>>>     rad ''
>>>
>>>     rad B
>>> 3 2
>>> 5 1
>>> 4 6
>>>
>>> On Thu, Oct 4, 2012 at 6:41 PM, Linda Alvord
>>> <lindaalv...@verizon.net>
>>> wrote:
>>>>
>>>>          rad=: 13 :'(A=:1,-. 2-:/\|:y)#"1 y' NB. Remove adjacent
>>>> duplicates
>>>>
>>>>     ]B=:2 4 $3 5 5 4 2 1 1  6
>>>> 3 5 5 4
>>>> 2 1 1 6
>>>>     rad B
>>>> 3 5 4
>>>> 2 1 6
>>>>
>>>>
>>>> The verb  rad  works as expected, but suppose in an earlier step  B
>>>> has become empty, I get a length error.  Why does this happen?
>>>>
>>>>
>>>>     C=:''
>>>>     rad C
>>>> |length error: rad
>>>> |   (A=:1,-.2-:/\|:y)    #"1 y
>>>>     A
>>>> 1
>>>>     1#"1 C
>>>>
>>>> What can I do to get an empty result?
>>>>
>>>> Linda
>>>>
>>>> --------------------------------------------------------------------
>>>> -
>>>> - 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
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to