3 relatively easy workarounds, 1. don't reference x or y in modifiers. (ie make them output a tacit expression)
instead of say: 1 : 'u@:libverb y', do 1 : ' u@:libverb' 2. rewrite as verb, If it really takes/needs another external verb input, then use a gerund left argument. The ti utility below allows you to "seemlessly" join verbs and (nouns or verbs) into a gerund. ar_z_=: 1 : '5!:1 <''u''' isNoun_z_ =: (0 = 4!:0 ::0:)@:<isgerund_z_ =: 0:`(0 -.@e. 3 : ('y (5!:0)';'1')"0)@.(0 < L.) :: 0: isgerundA_z_ =: 1 : ' if. isNoun ''u'' do. isgerund m else. 0 end.' ti_z_ 2 : 0 if. -. u isgerundA do. u =. u ar end. if. -. v isgerundA do. v =. v ar end. u,v ) whatwasmyadverb_lib_ =: 4 : ' ''`x f'' =. x label_. x f@:verbinlib y' call as x ti u whatwasmyadverb y can also bind as (ti u)(&whatwasmyadverb) 3. locate "members" this will work with instanced locales (objects) loc_z_=: (,&'_'@[ ,&'_'@, ":@>@])"1 0 boxopen locs_z_ =: 1:: m loc 18!:5 '' myadverb_lib_ =: 1 : ' u@:(''verbinlib'' locs) y ' NB. will fix to numbered locale or string locale. ________________________________ From: Xiao-Yong Jin <jinxiaoy...@gmail.com> To: programm...@jsoftware.com Sent: Friday, March 31, 2017 1:06 PM Subject: Re: [Jprogramming] locales with adverbs and conjunctions? I don't see how this would help. In concrete terms, I want the following public stable interface of a library SomeLib, cocurrent'SomeLib' libAdvb=:1 :'...' libVerb=:3 :'...' they refer to each other and a list of other names in SomeLib that should remain isolated as hidden implementation details that could change later. Now in a separate application, cocurrent'SomeApp' appVerb=:3 :0 ... libVerb_SomeLib_ appNoun NB. This is OK. otherAppVerb libAdvbInSomeLib otherAppNoun NB. ??? ... ) How would I write libAdvbInSomeLib to actually use libAdvb_SomeLib_, which can depend on all the names defined in SomeLib? The wiki link Henry sent told me to define a new verb in SomeLib, but that is undesirable. The newVerb_SomeLib_ defined in SomeApp pollutes the namespace in SomeLib and could clash with existing names. I wouldn't want SomeApp to touch the namespace of SomeLib. The following seems to work, but I wish for a simpler solution. h_t_=:1 : 0 NB. the helper for a_t_ echo'h_t_ in ',>coname'' ff_t_=.u a_t_ NB. ff_t_ actually becomes public in t ff_t_ y ) a_t_=:1 : 0 NB. can be a lot more involved definition echo 'a_t_ in ',>coname'' u f y ) f_t_=:3 : 0 NB. some verb in t echo 'f_t_ in ',>coname'' y ) f=:3 : 0 NB. some verb outside of t echo'f in ',>coname'' y ) a=:3 f_base_ h_t_ a NB. need to fully qualify the locale of f, but not a aa_t_ in base a_t_ in t f_t_ in t f in base 3 f h_t_ a NB. otherwise f_t_ is actually used aa_t_ in base a_t_ in t f_t_ in t f_t_ in t 3 ff h_t_ a NB. STACK ERROR for fun > On Mar 31, 2017, at 10:39 AM, Raul Miller <rauldmil...@gmail.com> wrote: > > There are certainly ways to work around this issue. It's just a minor > matter of coding them up. > > The important thing here is that adverb evaluation and verb evaluation > are two different things, and when your adverb is named in a locale > you need to capture the identity of that locale before creating the > verb if you want the verb to execute within that locale. > > Here's an approach that might work for you: > > advA_example_=:1 :0 > locale=. coname'' > u helperA locale > ) > > helperA_example_=:2 :0 > u__v y > ) > > Note also that if you don't like having a named helper, and if it's > small enough, you could put it in line: > > advB_example_=:1 :0 > locale=. coname'' > u 2 :'u__v y' locale > ) > > I haven't actually tested this, but I think I got this right - but let > me know if it doesn't work for you. > > Thanks, > > -- > Raul > > > On Fri, Mar 31, 2017 at 11:15 AM, Xiao-Yong Jin <jinxiaoy...@gmail.com> wrote: >> This is less useful. The simplest case that I use locale for is writing >> a_z_=:a_t_ >> with a_t_ an explicit definition that uses all the things defined in locale >> 't'. >> I could do it, had 'a' been a verb. >> With 'a' an adverb or conjunction, I have to suffix all names in 'a_t_' with >> '_t_', >> and as you mentioned this is less desirable as I can't override those >> definitions with >> the locale path any more. >> >> Is there any other way to work around it? >> >> I guess I can always do >> coinsert't' >> but that leaves open the possibility of name collisions and removes benefits >> of locales. >> >>> On Mar 31, 2017, at 8:40 AM, 'Pascal Jasmin' via Programming >>> <programm...@jsoftware.com> wrote: >>> >>> "The rule" is that "Semi tacit" modifiers can implicitly access members of >>> their own locale. Explicit modifiers cannot. The reason why. >>> >>> +: 1 : 'u' NB. semi tacit: processes entirely in locale and returns tacit >>> expression (then vanishes) >>> >>> +: >>> >>> +: 1 : ' u y' NB. explicit. returns bound explicit expression that executes >>> in some unknown locale. >>> +: (1 : ' u y') >>> >>> >>> You can also explicitly label the locales used in an explicit modifier. >>> >>> 1 : ' u aa_t_ y' >>> >>> will work from any locale. Though may not be appropriate when you make >>> "object instances" and need to have the reference move with the instance. >>> >>> >>> >>> >>> ________________________________ >>> From: roger stokes <rogerstokes...@gmail.com> >>> To: programm...@jsoftware.com >>> Sent: Friday, March 31, 2017 4:37 AM >>> Subject: Re: [Jprogramming] locales with adverbs and conjunctions? >>> >>> >>> >>> If you want +: a_t_ 3 to give a result of 6 then you need to write: >>> >>> a_t_ =: 1 : 'u aa' >>> aa_t_ =: 1 : 'u' >>> >>> +: a_t_ 3 >>> 6 >>> >>> >>> On Fri, Mar 31, 2017 at 5:08 AM, Xiao-Yong Jin <jinxiaoy...@gmail.com> >>> wrote: >>> >>>> Does locale change only happens with verbs? >>>> >>>> v_t_=:3 :'vv y' >>>> vv_t_=:3 :'+: y' >>>> v_t_ 3 >>>> 6 >>>> a_t_=:1 :'u aa y' >>>> aa_t_=:1 :'u y' >>>> +: a_t_ 3 >>>> |value error: aa >>>> | u aa y >>>> c_t_=:2 :'u cc v y' >>>> cc_t_=:2 :'u v y' >>>> +: c_t_ *: 3 >>>> |value error: cc >>>> | u cc v y >>>> >>>> This seems to be very inconvenient. >>>> ---------------------------------------------------------------------- >>>> 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 > ---------------------------------------------------------------------- > 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