Here's what I get.  The line will split but when I paste it back together:

    tc =: #:~ 2 #~ [: >./ 1 + [: >. (2 ^. |)`(2 ^.>:)@.(0 <: ])"0
   ]a=:tc i:6
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
   #.a
10 11 12 13 14 15 0 1 2 3 4 5 6

Not good. But your display does not have the first column, so maybe you need
to post the function again.

I tried to remove the first column to match your dislay:
  
   ]b=:1}."1 a
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0

   #.b
2 3 4 5 6 7 0 1 2 3 4 5 6

This is also not working.

Did you really read my post in a reply to a message to Devon? I'll repeat it
here as I am interested in your comments:

   ]a=:8+i.15
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
   ]b=:15#15
15 15 15 15 15 15 15 15 15 15 15 15 15 15 15
   ]c=:a-b
_7 _6 _5 _4 _3 _2 _1 0 1 2 3 4 5 6 7
   f=: 13 :'(x#2)#:y'
   f
] #:~ 2 #~ [
  
The function f converts the lists to binary numbers.  The largest number  22
is less than  32  so only  5  digits are require.

  ]aa=:5 f a
0 1 0 0 0
0 1 0 0 1
0 1 0 1 0
0 1 0 1 1
0 1 1 0 0
0 1 1 0 1
0 1 1 1 0
0 1 1 1 1
1 0 0 0 0
1 0 0 0 1
1 0 0 1 0
1 0 0 1 1
1 0 1 0 0
1 0 1 0 1
1 0 1 1 0

   ]bb=:5 f b
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1

 The result below is the difference in  J  between the two arrays above. It
is not a conversion using  #: 
   
   ]cc=:aa-bb
0  0 _1 _1 _1
0  0 _1 _1  0
0  0 _1  0 _1
0  0 _1  0  0
0  0  0 _1 _1
0  0  0 _1  0
0  0  0  0 _1
0  0  0  0  0
1 _1 _1 _1 _1
1 _1 _1 _1  0
1 _1 _1  0 _1
1 _1 _1  0  0
1 _1  0 _1 _1
1 _1  0 _1  0
1 _1  0  0 _1

For comparison, the result  cc2  is obtained  as a  J  result using  #:
   ]cc2=: 5 f c
1 1 0 0 1
1 1 0 1 0
1 1 0 1 1
1 1 1 0 0
1 1 1 0 1
1 1 1 1 0
1 1 1 1 1
0 0 0 0 0
0 0 0 0 1
0 0 0 1 0
0 0 0 1 1
0 0 1 0 0
0 0 1 0 1
0 0 1 1 0
0 0 1 1 1

Or:

  ]cc3=:#:c
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1

Both cc2 and cc3 seem implausible because all numbers are known positive
numbers. Now look at  cc :  

   w=: 13 :'(x,y)$|.2^i.y'
   w
, $ [: |. 2 ^ [: i. ]
   15 w 5
16 8 4 2 1
16 8 4 2 1
16 8 4 2 1
16 8 4 2 1
16 8 4 2 1
16 8 4 2 1
16 8 4 2 1
16 8 4 2 1
16 8 4 2 1
16 8 4 2 1
16 8 4 2 1
16 8 4 2 1
16 8 4 2 1
16 8 4 2 1
16 8 4 2 1

   cc*15 w 5
 0  0 _4 _2 _1
 0  0 _4 _2  0
 0  0 _4  0 _1
 0  0 _4  0  0
 0  0  0 _2 _1
 0  0  0 _2  0
 0  0  0  0 _1
 0  0  0  0  0
16 _8 _4 _2 _1
16 _8 _4 _2  0
16 _8 _4  0 _1
16 _8 _4  0  0
16 _8  0 _2 _1
16 _8  0 _2  0
16 _8  0  0 _1


   +/"1 cc*15 w 5
_7 _6 _5 _4 _3 _2 _1 0 1 2 3 4 5 6 7

This is c!

Not only that,  J  knows it is c.

   #.cc
_7 _6 _5 _4 _3 _2 _1 0 1 2 3 4 5 6 7

So what do you think?  

Linda   
   
-----Original Message-----
From: programming-boun...@jsoftware.com
[mailto:programming-boun...@jsoftware.com] On Behalf Of Kip Murray
Sent: Friday, December 16, 2011 2:43 AM
To: Programming forum
Subject: Re: [Jprogramming] How #: should have been designed

The verb tc (two's complement) appears to work

     tc =: #:~ 2 #~ [: >./ 1 + [: >. (2 ^. |)`(2 ^. >:)@.(0 <: ])"0

     twoscomplement i: 6
  0 1 0
  0 1 1
  1 0 0
  1 0 1
  1 1 0
  1 1 1
  0 0 0
  0 0 1
  0 1 0
  0 1 1
  1 0 0
  1 0 1
  1 1 0

     tc i: 6
  1 0 1 0
  1 0 1 1
  1 1 0 0
  1 1 0 1
  1 1 1 0
  1 1 1 1
  0 0 0 0
  0 0 0 1
  0 0 1 0
  0 0 1 1
  0 1 0 0
  0 1 0 1
  0 1 1 0


On 12/15/2011 12:52 PM, Kip Murray wrote:
> twoscomplement i: 4 NB. error
> 1 0 0
> 1 0 1
> 1 1 0
> 1 1 1
> 0 0 0
> 0 0 1
> 0 1 0
> 0 1 1
> 1 0 0
>
> rp =: [: }: [: i: 2 ^ <: NB. representable in y bits
>
> rp 3
> _4 _3 _2 _1 0 1 2 3
>
> twoscomplement rp 3 NB. OK
> 1 0 0
> 1 0 1
> 1 1 0
> 1 1 1
> 0 0 0
> 0 0 1
> 0 1 0
> 0 1 1
>
>
> On 12/14/2011 9:13 AM, Raul Miller wrote:
>> The subject line of this thread is arguably wrong -- there are a
>> variety of "good ways" of decomposing integers to binary.
>>
>> That said, it's interesting to think about the various proposals
>> expressed in terms similar to those which could be used to implement
>> monadic #:
>>
>> antibase2=: #:~ 2 #~ 1 + 2<.@^. 1>.>./@,@:|@:<.
>> twoscomplement=: #:~ 2 #~ 1 + 2<.@^. 1 +>./@,@:|@:<.
>> signwithbits=: #:~ 0, 2 #~ 1 + 2<.@^. 1>.>./@,@:|@:<.
>>
>> (In all cases the #: here is dyadic, so these definitions are
>> independent of the definition of monadic #:)
>>
>> antibase2 i: 3
>> 0 1
>> 1 0
>> 1 1
>> 0 0
>> 0 1
>> 1 0
>> 1 1
>> twoscomplement i: 3
>> 1 0 1
>> 1 1 0
>> 1 1 1
>> 0 0 0
>> 0 0 1
>> 0 1 0
>> 0 1 1
>> signwithbits i: 3
>> _1 0 1
>> _1 1 0
>> _1 1 1
>> 0 0 0
>> 0 0 1
>> 0 1 0
>> 0 1 1
>>
>> There's also (* * #:) but that one assumes the antibase2
>> implementation...
>>
----------------------------------------------------------------------
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