>should the anonymous verb created by

verb adv_locale_

automatically be executed in (locale)? 


The existing behaviour can be leveraged with duck typing in mind.

One easy workaround I didn't get too deep in is based on this magic fork

inl_z_ =: ((cocurrent@] ".@] [)"1 0 boxopen)


executes string x in  every locale y

A conjunction version lets you access local parameters,

lr_z_ =: 3 : '5!:5 < ''y'''
inlC_z_ =: 2 : ' (([: <^:(0=L.) v"_) inl~ m ,"1 '' '',"1 lr@:]) :  (([: 
<^:(0=L.) v"_) inl~ (lr@:[),"1 '' '' ,"1 m ,"1 '' '',"1 lr@:] )'

inlA =: 1 : 'u inlC  (18!:5 '''')'

ab_far_ =: 1 : (':';'x + a u y')
a_far_ =: 3

a_base_ =: 33

a ' + ab ' inlA_far_ 3
39

b =: 4 : 'x + a + y'

2 ' b_base_ ab ' inlA_far_ 3
41

in jpp, this can be


2  ( b_base_ ab  inlC.: far) 3
________________________________
From: Henry Rich <henryhr...@gmail.com>
To: programm...@jsoftware.com 
Sent: Tuesday, April 4, 2017 8:12 PM
Subject: Re: [Jprogramming] locales with adverbs and conjunctions?



I have been thinking about this & I don't see a better solution than 
Raul's.  @Raul: think about putting something in NuVoc explaining this.

I thought at first: should the anonymous verb created by

verb adv_locale_

automatically be executed in (locale)?  That would solve the immediate 
problem.

But it leaves us with the responsibility of defining a locale for every 
anonymous verb.  What locale should we assign to:

(V0 V1_locale_ V2)

(V0_locale0_ V1_locale1_ V2_locale2_)

(V0_locale0_ V1)

?

I haven't been able to come up with something I would be willing to 
suggest to Roger & Ken.

Unless someone does, I guess we will leave it as is.  The locale suffix 
gives an easy way to specify the locale of a verb - 98% of the cases - 
and for the rest you need Raul's Device.

Henry Rich



On 4/4/2017 4:03 AM, Raul Miller wrote:
> I am not sure how to test this (I do not know what values to use for f
> a and b in 'f qromb a b' and do not feel like studying your code
> enough to deduce such values), but I think this is what you are asking
> for:
>
> ---------- 8< ------ cut here ------ 8< ----------
>
> coclass'nr'
>
> qromb=:1 :0
>    qromb_implementation (coname '')
> )
>
> qromb_implementation=:2 :0
> NB.Returns the integral of the function from a to b.  NR P.166 Ch.4.3
> NB.Uses Romberg's method of order 2*K, where, e.g. K=2 is Simpson's rule.
> NB.u            function
> NB.y            a,b,eps integration bounds(a,b), and accuracy(eps,
> default 1e_10)
> NB.eps is the fraction error from extrapolation error estimate
> NB.PolyInterpX stores successive trapezoidal relative stepsizes
> NB.PolyInterpY stores their approximations
> NB.K is the number of points used in the extrapolation
>          cocurrent v
>          ab=.2{.y [ eps=.2{y,1e_10
>          PolyInterpY=:20#0 [ PolyInterpX=:21#0 [ PolyInterpM=:K=.5
>          PolyInterpX=:PolyInterpX 0}~1
>          TrapzdNextN=:0
>          j=.1 while.j<:#PolyInterpX do.
>                  PolyInterpY=:PolyInterpY(j-1)}~u trapzdNext ab
>                  if.j>:K do.'ss dy'=.0 polyInterpRawinterp j-K
> if.(|dy)<:eps*|ss do.ss return.end.end.
> NB.This is key.  The factor 0.25 allows h^2 extrapolation.  See NR
> equation 4.2.1.
>                  PolyInterpX=:PolyInterpX j}~0.25*PolyInterpX{~j-1
>          j=.>:j end.
>          'Too many steps in routine qromb'assert 0
> )
>
> polyInterpRawinterp=:4 :0
> NB.Polynomial interpolation.  NR P.119 Ch.3.2
> NB.x            the point of interpolation
> NB.y            j       subrange j+i.PolyInterpM is used for the interpolation
> NB.Must initialize
> NB.PolyInterpM=:5
> NB.PolyInterpX=:21#0
> NB.PolyInterpY=:20#0
>          j=.y
>          dif=.|x-j{PolyInterpX
>          i=.0 while.i<PolyInterpM do.
>                  if.dif>dift=.|x-PolyInterpX{~j+i do.ns=.i [ dif=.dift end.
>          i=.>:i end.
>          d=.c=.PolyInterpY ];.0~ j,:PolyInterpM
>          ns=.<:ns [ y=.PolyInterpY{~j+ns
>          m=.1 while.m<PolyInterpM do.
>                  i=.0 while.i<PolyInterpM-m do.
>                          ho=.x-~PolyInterpX{~j+i
>                          hp=.x-~PolyInterpX{~j+i+m
>                          w=.(c{~i+1)-i{d
>                          'PolyInterp error'assert 0~:den=.ho-hp
>                          den=.w%den
>                          d=.d i}~hp*den
>                          c=.c i}~ho*den
>                  i=.>:i end.
>                  if.(PolyInterpM-m)>2*ns+1 do.dy=.c{~ns+1
>                  else.ns=.<:ns [ dy=.ns{d
>                  end.
>                  y=.y+dy
>          m=.>:m end.
>          y,dy
> )
>
> trapzdNext=:1 :0
>          trapzdNext_implementation (coname '')
> )
>
> trapzdNext_implementation=:2 :0
> NB.Returns the nth stage of refinement of the extended trapezoidal
> rule.  NR P.163 Ch.4.2
> NB.u            function                must accept list
> NB.y            a,b     range
> NB.Must initialize TrapzdNextN=:0 before using.
>          cocurrent v
>          ba=.-~/y
>          TrapzdNextN=:>:TrapzdNextN
>          if.1=TrapzdNextN do.TrapzdNextS=:-:ba*+/u y return.
>          
> else.TrapzdNextS=:-:TrapzdNextS+ba*t%~+/u({.y)+(0.5+i.t)*ba%t=.2^TrapzdNextN-2
> return.
>          end.
> )
>
> ---------- 8< ------ cut here ------ 8< ----------
>
> This is a rather bulky example, if there are problems with this
> approach it might be better to define a more concise (and complete -
> with a test case which illustrates the problem) example?
>
> Thanks,
>

----------------------------------------------------------------------
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