Yes, F. would be my preferred way, seems like it is made for this kind of
thing. I did try this:
u=: monad define
_2 Z: -.* N=:N-1
_2 Z: lowerbound = >@{:
y
)
s=: (u F. search)"1 m
but here I would like to replace _2 Z: -.* N=:N-1 with some x Z: n that exits
like _2 Z:, after n iterations. But maybe this doesn’t align with Fold being a
recurrence relation?
Regards, Anton Wallgren
On 26 May 2020, 16:07 +0200, Henry Rich <[email protected]>, wrote:
> I suggest/implore you reconsider using Fold. Fold is a new addition to
> J, and is intended to pick up cases where other J idioms would be
> inefficient. Like your case. If Fold doesn't work for you, I'd like to
> consider what needs to be added to it.
>
> This example suggests that it might be wise to have the loop iteration
> number available, perhaps as the result of monad Z:. But I would like to
> see what Fold would look like for your case.
>
> Do note that the 9.02 docs (which is what NuVoc is at now) reflect the
> fact that we changed the definition of Fold to apply v first, then y.
> So your Fold implementation would be
>
> test-for-exit F. do-one-iteration y
>
> in 9.02.
>
> Henry Rich
>
>
>
> On 5/26/2020 8:58 AM, Anton Wallgren wrote:
> > Cool! Seems preferable to the for loop (at least for one example) as well
> > (modified a bit since I’m using a boxed array as y):
> >
> > repuntil=: 2 : '((<:&.>@{. , u@}.) ` ] @. v)^:(0 < >@{.)^:_'
> > repuntil2=: 2 : 'for. i.x do. if. v y do. break. else. y=. u y end. end.'
> > cond=: 6 >: >@{:
> >
> > depth=: 100000
> >
> > timespacex '(search repuntil cond)"1 (< depth) ,"1 m'
> > 38.0857 182080
> > timespacex 'depth (search repuntil2 cond)"1 m'
> > 38.1578 1.2073e6
> >
> > Regards, Anton Wallgren
> > On 26 May 2020, 13:45 +0200, Jan-Pieter Jacobs
> > <[email protected]>, wrote:
> > > Hi, I would do something like this:
> > >
> > > f=: +:
> > > cond=: 100<{:
> > > repuntil =: 2 : '((<:@{. , u@}.)`] @. v )^:(0<{.)^:_'
> > > f repuntil cond 20 1
> > > 0 32
> > >
> > > f repuntil cond 20 1
> > > 13 128
> > >
> > > the first item tells you whether:
> > >
> > > - if 0: iterations ended due to hitting the limit (first item of
> > > argument);
> > > or
> > >
> > > - if > 0, the condition became true.
> > >
> > > The agenda (@.) construct is just a way of making the left verb argument
> > > to
> > > the left-most ^: return the same twice, which triggers the end of the
> > > iteration by ^: _ .
> > >
> > > Good luck exploring J, it'll keep being interesting for long ;).
> > >
> > > Best regards,
> > >
> > > Jan-Pieter
> > >
> > > On Tue, May 26, 2020, 12:04 'Rob Hodgkinson' via Programming <
> > > [email protected]> wrote:
> > >
> > > > I don’t agree, it does not proceed further.
> > > >
> > > > ([x] u^:v^:_ y) will actually stop when v returns 0 (does not skip or
> > > > continue executing)
> > > >
> > > > Here is a simple way to confirm this using a function f to do 2&* but
> > > > which also uses ’smoutput’ to output to the session log (print
> > > > intermediate
> > > > results).
> > > >
> > > > f=: verb define
> > > > smoutput r=:2*y
> > > > r
> > > > )
> > > >
> > > > f 5
> > > > 10 NB. Intermediate print using smoutput
> > > > 10. NB. Result of f
> > > >
> > > > Test it…
> > > > a=:f 5
> > > > 5. NB. It still prints within f via smoutput
> > > >
> > > > So now …
> > > > f^:(10>])^:3 ] 1
> > > > 2 }
> > > > 4 } Intermediates from smoutpout (f called 3 times)
> > > > 8 }
> > > > 8 NB. Result returned (ran to completion)
> > > > f^:(10>])^:4 ] 1
> > > > 2 }
> > > > 4 } Intermediates from smoutpoutn (f called 4 times)
> > > > 8 }
> > > > 16 }
> > > > 16 NB. Result returned (ran to completion)
> > > > f^:(10>])^:8 ] 1
> > > > 2 }
> > > > 4 } Intermediates from smoutput (f called 4 times)
> > > > 8 }
> > > > 16 }
> > > > 16 NB. Result returned (aborted, so it stopped short
> > > > and did not proceed further)
> > > >
> > > > HTH, Rob
> > > >
> > > >
> > > > > On 26 May 2020, at 6:40 pm, Anton Wallgren <[email protected]>
> > > > > wrote:
> > > > >
> > > > > On closer inspection, f^:v^:n doesn’t seem to work (as I want it to).
> > > > What it does is to skip evaluation each time v y returns 0. While this
> > > > would work in my situation, as the stopping condition would remain
> > > > true, it
> > > > would of course be unnecessary (and inefficient) to keep checking this
> > > > for
> > > > the remainder of the iterations.
> > > > > Thanks, Anton Wallgren
> > > > ----------------------------------------------------------------------
> > > > 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
>
>
> --
> This email has been checked for viruses by AVG.
> https://www.avg.com
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm