TESTS2 ,: PRICES1 {~  BUCKETS1 (#...@[ <:@- |....@[ I. ]) TESTS2=:__  _9999
9999 _  
__ _9999 9999 _
__    __    _ _

I assume this is what you want.


R.E. Boss


> -----Oorspronkelijk bericht-----
> Van: [email protected] [mailto:programming-
> [email protected]] Namens Dan Bron
> Verzonden: woensdag 17 maart 2010 20:33
> Aan: 'Programming forum'
> Onderwerp: Re: [Jprogramming] How to use dyad I.
> 
> That looks good, but can't look at it right now -- does it appropriately
> give __ and _ for _9999 and 9999 respectively?
> 
> -Dan
> 
> -----Original Message-----
> From: [email protected] [mailto:programming-
> [email protected]] On Behalf Of R.E. Boss
> Sent: Wednesday, March 17, 2010 1:51 PM
> To: 'Programming forum'
> Subject: Re: [Jprogramming] How to use dyad I.
> 
> If I slightly change your BUCKETS, PRICES and TESTS in
> 
>    BUCKETS1 =: __ , ge , {: lt
> 
>    PRICES1  =:  __ , _ ,~ out
> 
>    TESTS1=: BUCKETS1 , _
> 
> and use a verb which is equivalent to Schott's Idotr and Millers F, I get
> 
>    TESTS1 ,: PRICES1 {~  BUCKETS1 (#...@[ <:@- |....@[ I. ]) TESTS1
> __   0 0.06 0.11 0.16 0.21 0.26 0.31 0.36 0.41 0.46 0.51 0.56 0.61 0.66
> 0.71
> 0.76 0.81 0.86 0.91 0.96 1.01 _
> __ 0.1 0.18 0.26 0.32 0.38 0.44  0.5 0.54 0.58 0.62 0.66  0.7 0.74 0.78
> 0.82
> 0.86  0.9 0.94 0.98    1    _ _
> 
> Is this what you want?
> 
> 
> R.E. Boss
> 
> 
> > -----Oorspronkelijk bericht-----
> > Van: [email protected] [mailto:programming-
> > [email protected]] Namens Dan Bron
> > Verzonden: dinsdag 16 maart 2010 15:54
> > Aan: 'Programming forum'
> > Onderwerp: [Jprogramming] How to use dyad I.
> >
> > When using dyad I, how does one control how to handle the various edge
> > conditions gracefully (specifically out-of-bounds values and
> > values exactly between intervals)?
> >
> >     (1) y is greater or lesser than the head or tail of x
> >     (2) y is exactly equal to a value of x, and I want to
> >         decide if that means it should fall to the left
> >         of the value or to the right.
> >
> > All of this with an eye to performance, of course (I don't want to do
> the
> > equality outer product x=/y to handle edge conditions, for
> > example).
> >
> > For example, how would you solve
> > http://rosettacode.org/wiki/Price_Fraction cleanly? My first quick hack
> > is:
> >
> >     'ge lt out'=:ALL=:|: 0 ". ];._2 noun define
> >             0.00 0.06  0.1
> >             0.06 0.11 0.18
> >             0.11 0.16 0.26
> >             0.16 0.21 0.32
> >             0.21 0.26 0.38
> >             0.26 0.31 0.44
> >             0.31 0.36  0.5
> >             0.36 0.41 0.54
> >             0.41 0.46 0.58
> >             0.46 0.51 0.62
> >             0.51 0.56 0.66
> >             0.56 0.61  0.7
> >             0.61 0.66 0.74
> >             0.66 0.71 0.78
> >             0.71 0.76 0.82
> >             0.76 0.81 0.86
> >             0.81 0.86  0.9
> >             0.86 0.91 0.94
> >             0.91 0.96 0.98
> >             0.96 1.01    1
> >     )
> >
> >             NB.  Price buckets; the infinities are sentinels allowing me
> >             NB.  to handle any unknown price.
> >             BUCKETS =: __ , _ ,~ ge , {: lt
> >
> >             NB.  Test exactly at buckets, and well within buckets
> >             TESTS   =:  _9999 9999 (1 _2) } }: , (,. _ ,~ 2 (+/%#)\])
> > BUCKETS
> >
> >             NB.  Low unknown prices = __ , high unknown = _ .
> >             PRICES  =:  __ __ , _ ,~ out
> >
> >             smoutput TESTS ,: PRICES {~ (_1e_16 + BUCKETS) I. TESTS
> >
> > (the handling of out-of-bounds values isn't required by the RC task, but
> > I'm just using the RC task to illustrate common issues I
> > have with I.)
> >
> > Reasons I don't like this hack (bearing in mind I didn't think much,
> just
> > wrote code until I got a solution that mostly worked):
> >
> >     (a) It's still not right (for the input 1.01 the output
> >         is 1, where it should be _),
> >     (b) The addition of _1e_16 feels hacky and will break if
> >         I. ever gets tolerant (or under various other conditions)
> >     (c) I had to prepend 2 copies of __ to prices, instead of
> >         1, to get this to work.
> >
> > Also, I note that the Python solution leverages a function called
> > bisect.bisect_right -- implying there's a bisect.bisect_left.  Is
> > I. inherently biased in one direction or the other, or is this managed
> by
> > using different grades or applying reversals?
> >
> > -Dan
> >
> >
> > ----------------------------------------------------------------------
> > 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