And, for what it's worth, here's a different plausible implementation
of cross (different only for the case of duplicated letters in the
argument when compared with the version I posted, below):

   (,@(#~"0"1) (+.|.)@=@(#\)) 'abcdedcba'

Note that replacing = with =@(#\) should also work for Aai's original version.

FYI,

-- 
Raul

On Mon, Dec 10, 2012 at 1:28 PM, Raul Miller <rauldmil...@gmail.com> wrote:
> Here's a version that works with duplicated values (except note that
> there was no specification for what the behavior should be in this
> case):
>
>    (,@(#~"0"1) (+.|.)@=)'abcde'
> a   e
>  b d
>   c
>  b d
> a   e
>
>    (,@(#~"0"1) (+.|.)@=)'abcdedcba'
> a   e   a
>  b d d b
>   c   c
>  b d d b
> a   e   a
>
> --
> Raul
>
> On Mon, Dec 10, 2012 at 1:21 PM, Roger Hui <rogerhui.can...@gmail.com> wrote:
>> The expression fails if the argument has duplicate items. e.g.
>>
>>    ((+.|.)@={"0 1 ' '&,.)'aabbb'
>> |length error
>> |       ((+.|.)@={"0 1' '&,.)'aabbb'
>>
>>
>>
>> On Mon, Dec 10, 2012 at 10:18 AM, bob therriault 
>> <bobtherria...@mac.com>wrote:
>>
>>> That is lovely Arie,
>>>
>>> It is that kind of elegance that I was chasing with my rougher attempts.
>>>
>>> Using the (+.|.) hook simplifies (|.+.]) precisely and the {" 0 1
>>>  combined with ' '&,. means that the selection of the string becomes a
>>> choice in each row of displaying either the corresponding element of the
>>> string or a blank.
>>>
>>> Cheers, bob
>>>
>>> On 2012-12-10, at 1:11 AM, Aai wrote:
>>>
>>> >  ((+.|.)@={"0 1 ' '&,.)'abcde'
>>>
>>> ----------------------------------------------------------------------
>>> 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