So something like this:
   (-@(<&0) ,. #:) i:5
_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

With that we lose all hope of uniqueness, though.

Marshall

On Mon, Dec 12, 2011 at 8:20 PM, Henry Rich <henryhr...@nc.rr.com> wrote:

> Agreed.  What I'm saying is, make the 2's-comp sign bit a _1, and all
> will be well.
>
>    #: _10
> 0 1 1 0
>
> I didn't know it did that!  That seems wrong:
>
>    #: _10 20
> 1 0 1 1 0
> 1 0 1 0 0
>
> Just change the sign of _10 from 1 to _1:
>
>    #. _1 0 1 1 0
> _10
>
> The nice thing about this is, you know if a number is negative you have
> to convert it to binary in 2's-complement; and if it has a leading _1 it
> represents a negative; so #. and #: will handle positive and negative
> numbers smoothly, and are compatible with current code except for the
> behavior of #: on negatives, which we agree is anomalous.
>
> And you can do |@:#: if you don't like the negative sign bit.
>
> Still differs from 2&#:, though.
>
> Henry Rich
>
> On 12/12/2011 7:44 PM, Marshall Lochbaum wrote:
> > You can't, unfortunately. _10, for example, is #._1 0 1 1 0 , which is
> the
> > shortest possible representation for it. In fact, my code only gives
> > adjacent _1 1's on powers of two. In this case it is wrong-- _8 should be
> > _1 0 0 , not _1 1 0 0 .
> >
> > Marshall
> >
> > On Mon, Dec 12, 2011 at 7:07 PM, Henry Rich<henryhr...@nc.rr.com>
>  wrote:
> >
> >> I like your leading-digit-negative idea better too.  Rather than
> >> prepending a leading _1, you could just change the high-order 1 to _1 .
> >>
> >> Henry Rich
> >>
> >> On 12/12/2011 5:57 PM, Marshall Lochbaum wrote:
> >>> Those are some very good arguments. Personally, I think my version is
> >>> mathematically more well-founded (for instance, when we define the
> >> decimal
> >>> for a real number, we simply make the first digit an integer and the
> >> rest,
> >>> those after the decimal place, nonnegative and less than the base).
> >>> However, you've convinced me that your version works better within J,
> at
> >>> least for arbitrary use. Within particular applications a user might
> want
> >>> something different, but he can code that himself.
> >>> I still wouldn't recommend changing J for that nuance, though.
> >>>
> >>> I do think that #: for scalar left arguments should act the same as
> >> #.^:_1,
> >>> rather than | . Some day, when I get that source working, I might look
> >> into
> >>> that...
> >>>
> >>> Marshall
> >>>
> >>> On Mon, Dec 12, 2011 at 5:25 PM, Dan Bron<j...@bron.us>   wrote:
> >>>
> >>>> Raul wrote:
> >>>>>    And (* * #:@:|) achieves this result.
> >>>>
> >>>> I used (*@:] * (#.^:_1 |)) because if we're going to change #: , we
> >> need a
> >>>> consistent definition for all bases.  (But I hear your implication
> that
> >> we
> >>>> are not going to change #: .)
> >>>>
> >>>> Oh, and I just realized that my ab1 was not a faithful reproduction of
> >>>> Marshall's verb, so in my comments below, substitute his original for
> >> ab1 .
> >>>>    Sorry about that!
> >>>>
> >>>> -Dan
> >>>>
> >>>> PS:
> >>>>
> >>>> Still bugs me that 2 #: y<==>    2 #.^:_1 y doesn't hold non-scalar y
> .
> >>   It
> >>>> contradicts the dictionary, and makes discussions like this more
> >> difficult.
> >>>>
> >>>> For example, I want to be able to say *@:] * (#: |) is the
> >>>> radix-generalized equivalent of your binary * * #:@:| (i.e. the dyad
> to
> >>>> your monad),  but it isn't.  So I have to use circumlocutions like
> >>   #.^:_1
> >>>>    .
> >>>>
> >>>> I reported this in 2006; maybe someone who's got the J source to build
> >> can
> >>>> fix it?
> >>>>
> >>>>
> >>>>
> >>
> http://www.jsoftware.com/jwiki/System/Interpreter/Bugs06#definitionofdyad.23.3Aincomplete
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> -----Original Message-----
> >>>> From: programming-boun...@jsoftware.com [mailto:
> >>>> programming-boun...@jsoftware.com] On Behalf Of Raul Miller
> >>>> Sent: Monday, December 12, 2011 5:02 PM
> >>>> To: Programming forum
> >>>> Subject: Re: [Jprogramming] How #: should have been designed
> >>>>
> >>>> And (* * #:@:|) achieves this result.
> >>>>
> >>>>     #. (* * #:@:|) i: 3
> >>>> _3 _2 _1 0 1 2 3
> >>>>
> >>>> That's probably good enough for now.
> >>>>
> >>>> --
> >>>> Raul
> >>>>
> >>>> On Mon, Dec 12, 2011 at 4:34 PM, Dan Bron<j...@bron.us>   wrote:
> >>>>> I don't think there's a violation of a uniqueness constraint.
> >>>>>
> >>>>> Consider: for a positive scalar argument y, then #:y is unique
> >>>> (trivially).
> >>>>> And, in the approach we're discussing, when the argument is negative,
> >> as
> >>>> in
> >>>>> #:-y, then the result is just -#:y . Therefore, #:-y is also unique,
> >> and
> >>>>> furthermore distinct from #:y.  That is:  the results of #: are
> always
> >>>>> strictly non-positive or non-negative.  No individual result of #:
> will
> >>>>> contain both positive and negative digits.
> >>>>>
> >>>>> I also wouldn't mind your proposal of (#:-y) = _1 , #: y , but I
> think
> >>>> the
> >>>>> -#:y approach can claim some advantages.  Given:
> >>>>>
> >>>>>          ab0 =: *@:] * (#.^:_1 |)
> >>>>>          ab1 =: (_1 * 0>   ]) ,"0 1^:(0~:+/@:[) #.^:_1    NB.
>  Distilled
> >>>> from
> >>>>> your code
> >>>>>
> >>>>> We note first that ab0 is simpler than ab1.  That means it's easier
> to
> >>>>> understand and implement (and debug).
> >>>>>
> >>>>> Second, the results of ab0 are easier to interpret.  Knowing the
> >>>> definition
> >>>>> of both verbs, you could tell me what decimal number _1 _2 _3
> >> represents
> >>>> on
> >>>>> sight, but with _1 8 7 7 you'd have to do some mental calculation
> (they
> >>>> both
> >>>>> represent the quantity _123).  This advantage is cumulative when
> >>>> reasoning
> >>>>> about arrays of results (i.e., in J).
> >>>>>
> >>>>> Third, critically, the shape of ab0's results doesn't change with the
> >>>> sign
> >>>>> of its argument.  This is important and valuable in a J context.  For
> >>>>> example:
> >>>>>
> >>>>>             _5 + 6
> >>>>>          1
> >>>>>             _5 +&.(2&ab0 :. #.) 6
> >>>>>          1
> >>>>>             _5 +&.(2&ab1 :. #.) 6
> >>>>>          |length error
> >>>>>          |   _5    +&.(2&ab1 :.#.)6
> >>>>>
> >>>>> Moreover, this feature is particularly important for digit-arrays,
> >>>> because J
> >>>>> pads on the right, but in the positional number system, right-padding
> >> is
> >>>>> anathema.  That is, prepending a _1 exacerbates a problem #: already
> >> has
> >>>> (by
> >>>>> allowing more opportunities for it to arise):
> >>>>>
> >>>>>             my_array =: 2 ab1 3 2 1
> >>>>>             my_array =: my_array , 2 ab1 _1 _2 _3
> >>>>>             #. my_array
> >>>>>          6 4 2 _1 _2 _3
> >>>>>             NB.  Ouch! Where'd my 3 2 1 go?
> >>>>>
> >>>>> Finally, I'd argue that the -#:y also makes intuitive sense: _123
> means
> >>>>> "subtract one hundred, [subtract] two tens, and [subtract] three
> >> units".
> >>>>> Though this is subjective, it does allow one to reason about negative
> >>>>> numbers in a straightforward and expected way:
> >>>>>
> >>>>>             _123 + 456
> >>>>>          333
> >>>>>             _1 _2 _3 + 4 5 6
> >>>>>          3 3 3
> >>>>>             10 #. _1 _2 _3 + 4 5 6
> >>>>>          333
> >>>>>
> >>>>>             _123 * 456
> >>>>>          _56088
> >>>>>             _1 _2 _3 * 456
> >>>>>          _456 _912 _1368
> >>>>>             10 #. _1 _2 _3 * 456
> >>>>>          _56088
> >>>>>
> >>>>> BTW, though I am using decimal examples, all these comments apply
> >>>> equally to
> >>>>> binary numbers, and every other base.
> >>>>>
> >>>>> -Dan
> >>>>>
> >>>>> -----Original Message-----
> >>>>> From: programming-boun...@jsoftware.com
> >>>>> [mailto:programming-boun...@jsoftware.com] On Behalf Of Marshall
> >>>> Lochbaum
> >>>>> Sent: Monday, December 12, 2011 2:55 PM
> >>>>> To: Programming forum
> >>>>> Subject: Re: [Jprogramming] How #: should have been designed
> >>>>>
> >>>>> The problem with this is that we would prefer not to use negative
> >> numbers
> >>>>> in antibase, since they can violate uniqueness of base
> representation.
> >>>>> There's really no solution to this--my recommendation is to just
> never
> >>>> feed
> >>>>> negative numbers to #: . However, an option that minimizes negative
> >>>> numbers
> >>>>> (and is very close to simply having two's complement base
> >> representation)
> >>>>> is to make the first digit negative if the number is negative. Thus
> #:
> >>>>> becomes
> >>>>> base =. [: |."_1@:>   |.@(#:`(_1,#:)@.(<&0))&.>
> >>>>> Basically, use J's #: , and prepend a _1 if the input is negative.
> Then
> >>>>> reverse, box, open everything for fill, and reverse again.
> >>>>>
> >>>>>     base i:5
> >>>>> _1  0  1 1
> >>>>> _1  1  0 0
> >>>>>    0 _1  0 1
> >>>>>    0 _1  1 0
> >>>>>    0  0 _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
> >>>>>     #. base i:5
> >>>>> _5 _4 _3 _2 _1 0 1 2 3 4 5
> >>>>>
> >>>>> Marshall
> >>>>>
> >>>>> On Mon, Dec 12, 2011 at 2:09 PM, Dan Bron<j...@bron.us>   wrote:
> >>>>>
> >>>>>> Maybe we should explore a different track.  Forget all about the
> >> history
> >>>>> of
> >>>>>> computing hardware, and the advantages of one representation over
> >>>> another
> >>>>>> when designing circuits.  In purely mathematical terms, what are the
> >>>>>> decimal
> >>>>>> digits of the base-10 number -123 ?
> >>>>>>
> >>>>>> Working backwards:
> >>>>>>
> >>>>>>     _123                                        NB.  begin
> >>>>>>     -123                                        NB.
> >>   notation->operation
> >>>>>>     _1 * 123                                    NB.  definition of -
> >>>>>>     _1 * (1 * 10^2) + (2 * 10^1) + ( 3 * 10^0)  NB.  positional
> number
> >>>>>> notation
> >>>>>>     (_1 * 10^2) + (_2 * 10^1) + (_3 * 10^0)     NB.  distribution
> of *
> >>>> over
> >>>>> +
> >>>>>>     _1 _2 _3 +/ . * 10^2 1 0                    NB.  array
> >> simplification
> >>>>>>     10 #. _1 _2 _3                              NB.  definition of
> #.
> >>>>>>
> >>>>>> Thus, to satisfy the purposes of inversion, we should have:
> >>>>>> [all examples from here on are purely theoretical, and the
> >>>>>> results differ in the extant implementations of J]:
> >>>>>>
> >>>>>>     10 #.^:_1: _123
> >>>>>> _1 _2 _3
> >>>>>>
> >>>>>> And, analogously in base 2:
> >>>>>>
> >>>>>>     2 #.^:_1: 2b_101                            NB.  2b_101 is J's
> >>>> notation
> >>>>>> for -101 in base 2
> >>>>>> _1 0 _1
> >>>>>>     #: 2b_101                                   NB.  #:<=>
> 2&#.^:_1:
> >>>>>> _1 0 _1
> >>>>>>     #: _5                                       NB.  _5<=>   2b_101
> >>>> (numbers
> >>>>>> are analytic)
> >>>>>> _1 0 _1
> >>>>>>
> >>>>>> QED.*
> >>>>>>
> >>>>>> -Dan
> >>>>>>
> >>>>>> *  Backwards compatibility notwithstanding
> >>>>>>
> >>>>>> PS:  What implications does this have for modulus, as in _10 | 123 ?
> >>>>>>
> >>>>>>
> >>>>>>
> ----------------------------------------------------------------------
> >>>>>> 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
> >
> ----------------------------------------------------------------------
> 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