I think http://jsoftware.com/help/release/iamend.htm might be relevant.

Note also that in this case I'm not sure if "boolean" really means
"non-negative integer". (If I understand properly: in George Boole's
arithmetic these were equivalent, and some of the details here suggest that
that original meaning might be relevant here. It's a confusing topic though
because it has become popular, depending on context, to assert that
"boolean" can only refer to the values 0 and 1 and also that "boolean"
cannot be used to refer to the values 0 and 1.)

Thanks,

-- 
Raul



On Thu, Aug 7, 2014 at 6:02 AM, Roger Stokes <
[email protected]> wrote:

> Dear All,
>
> I've come across a puzzle
> and would be glad if someone could explain it.
>
> In a few words, I have a variation of collatzv which is a one-liner
>  (c1 below) and the very same verb spread over several lines (c2 below).
> The second is nearly twice as fast as the first.  How come?
>
> The timings I get are
>
>  collatzv T          0.0592513
>
>  c1 T NB. one-liner  0.0582203
>
>  c2 T NB. spread out 0.0352435
>
> where T is  2 + i. 1e6
>
> What follows is transcript of session producing these results.
>
> Starting with Roger Hui's original collatzv:
>
>
>    collatzv =: 3 : '<. (2|y)} 0 1 + 0.5 3 */y'
>
>    NB. here is my one-liner, an experiment intended to stick to
>    NB. integer arithmetic throughout.
>
>    c1 =: 3 : '(_1 & (33 b.)) (2 | y) }  y ,: (2 + 6 * y)'
>
>    NB. here is a spread-out version
>
>    c2 =: 3 : 0
>   a =. 2 | y
>   b =. 2 + 6 * y
>   c =. a } y ,: b
>   (_1 & (33 b.)) c
> )
>
>    (collatzv -: c1) T =: 2 + i. 1e6
> 1
>    (collatzv -: c2) T
> 1
>
>    NB. comparing timings:
>
>    compare =: (; (6!:2)) @: > "0
>    compare 'collatzv T '; 'c1 T NB. one-liner '; 'c2 T NB. spread out'
>
>  collatzv T          0.0587746
>
>  c1 T NB. one-liner  0.0579726
>
>  c2 T NB. spread out 0.0340378
>
>
>    NB. Do we get the same effect by spreading collatzv?  No.
>
>    collatzvs =: 3 : 0
>   a =. 0 1 + 0.5 3 */y
>   b =. 2|y
>   c =: b } a
>   <. c
> )
>
>    (collatzv -: collatzvs) T
> 1
>
>    compare  'collatzv T '; 'c1 T '; 'c2 T '; 'collatzvs T '
>
>  collatzv T   0.0591852
>
>  c1 T         0.0594112
>
>  c2 T         0.034516
>
>  collatzvs T  0.0597546
>
>
>    JVERSION
> Engine: j701/2011-01-10/11:25
> Library: 8.02.10
> Qt IDE: 1.1.3/5.3.0
> Platform: Win 64
> Installer: J802 install
> InstallPath: c:/users/homer/j64-802
>
>
>
> ----------------------------------------------------------------------
> 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