On Wed, Jun 9, 2010 at 3:54 AM, Roger Hui <[email protected]> wrote:

> For example:
>
>   foo=: >:
>   X=: 6
>   }.^:(X ~: f...@{.)^:_ ] 3 1 4 1 5 9
> 5 9
>
> I think you can omit the second ^: for tiny performance gain:
   (}.~ X ~: f...@{.)^:_ ] 3 1 4 1 5 9
5 9


> A better solution, I think, is special code for (f i. 1:)
> for more general f, similar to the existing special code
> for (= i. 1:), (> i. 1:) etc.
>
> The following timing shows that something different
> is going on with (= i. 1:) vs. (x=y)i.1 :
>
>   x=: ?1e6$100
>   6!:2 '1 (= i. 1:) x'
> 2.26286e_5
>   6!:2 '(1=x) i. 1'
> 0.00541857
>
>
>
> ----- Original Message -----
> From: Alexander Mikhailov <[email protected]>
> Date: Tuesday, June 8, 2010 23:22
> Subject: [Jchat] on the J thought style again
> To: [email protected]
>
> > I'm writing a function which goes roughly as the following:
> > "from the input array, take first element and do Foo to it. If
> > the result is X, stop, otherwise get second element and do Foo
> > to it. If the result is X, stop... etc. If the result of last
> > element is still not X, return Y"
> >
> > I started to write like this:
> >
> > Foo y
> >
> > and then I realize that I'm doing Foo to all elements of input
> > at once, even those which potentially won't be needed.
> >
> > So, trying to be optimal complicates things. A familiar observation.
> >
> > What would be an advice to J-ers? Clarity of idea - or, in
> > extreme cases, soundness of algorithm? Or, rather, how to find a
> > balance here?
> ----------------------------------------------------------------------
> 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