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