this one has the "near hope" of working

myVerb2=: 3 : 0 
funcB_B_ (mean__this ` '') 
)
except that what gets passed is a "late bound" name, and "this" does not exist 
in B


  mean__newA ` '' 
┌──────────┐ 
│mean__newA│ 
└──────────┘

Raul provided a locative.  My versions,

loc_z_ =: (,&'_'@[ ,&'_'@, ":@>@])"1 0 boxopen 

locs_z_ =: 1 : 'm loc 18!:5 ''''' 

 'mean' locs 
mean_base_ 


'mean' loc newA 
mean_0_
 'mean' locs_A_ 
mean_A_

so rewrite,

myVerb2 =: 3 : 0
funcB_B_ < 'mean' locs
)

You don't need a "this" assignment in create.________________________________
From: 'Jon Hough' via Programming <[email protected]>
To: [email protected] 
Sent: Friday, September 1, 2017 9:59 AM
Subject: Re: [Jprogramming] Passing class member gerund to verb in another 
locale



I see. I apologize, my pseudo-python examples were misleading. I am calling 
funcB from a method of newA. Not form outside the class definition. The python 
pseudo-code is wrong in this regard.


coclass 'A'


create=: ....

this=: coname '' 

)


myVerb1=: 3 : 0

funcB_B_ (mean ` '')

)


myVerb2=: 3 : 0

funcB_B_ (mean__this ` '')

)


myVerb3=: 3 : 0

funcB_B_ (mean f.  ` '') NB. as you already stated this loses locale info.

)



myVerb1,myVerb2,myVerb3 would all fail.


As I stated previously, I think my best bet is just to pass a myA reference 
into funcB and be done with it. I think I am trying to twist the locale system 
into doing something it is not designed for. 


--------------------------------------------

On Fri, 9/1/17, 'Pascal Jasmin' via Programming <[email protected]> 
wrote:


Subject: Re: [Jprogramming] Passing class member gerund to verb in another 
locale

To: "[email protected]" <[email protected]>

Date: Friday, September 1, 2017, 10:44 PM


You only need to do 


newA =: conew 'A'


funcB mean__newA`'' ; 0 


2


that will use whatever "copy of d" that

is set in newA

________________________________

From: 'Jon Hough' via Programming

<[email protected]>

To: [email protected]


Sent: Friday, September 1, 2017 9:41

AM

Subject: Re: [Jprogramming] Passing

class member gerund to verb in another locale




You are correct. However, I really need

to use an instance of A (actually the possibility of several

instances existing at the same time).


If I am absolutely sure I only have one

instance of A, i.e. myA, then I could cache the reference in

the A locale


cocurrent 'A'



instance=: '' NB. none by default


coclass 'A'



create=: 3 : 0


... do stuff...


instance_A_=: coname ''


)



Then once I have the reference, as I

understand it, I can do pretty much anything by switching in

and out of locales, and grab myA's reference when in B. This

will only work if there is a single instance of A.



But, my whole purpose is to have

several different instances of A, any of whose member verbs

can be passed (as gerunds or however else) to some verb in B

locale. 



It seems that  an object's verbs

do not contain any reference to the actual object, so what I

want is pretty difficult to do in J.


Although this is trivial in some other

languages, e.g. pseudo-python:



# create two instances of A


myA =A(1)


myOtherA = A(10000)



# pass the instances' method1 to some

utility function, "interestingFunction"


# and get some interesting results.


result1 =

interestingFunction(myA.method1)


result2 = 

interestingFunction(myOtherA.method1)



It seems J's locale system does not

handle this very well. 


--------------------------------------------


On Fri, 9/1/17, 'Pascal Jasmin' via

Programming <[email protected]>

wrote:



Subject: Re: [Jprogramming] Passing

class member gerund to verb in another locale


To: "[email protected]"

<[email protected]>


Date: Friday, September 1, 2017, 10:19

PM



this simplification seems to


work, (defined in base)




d_A_ =: 1 2 3 


mean_A_ =: 3 :


'(+/ % #) d' 


mean_A_ 0 


2 




NB. use F8, also works with funcB_B_


definition



funcB=: 3 : 0




'vrb data' =: y




f=: vrb `:6 



f data 



) 





funcB mean_A_`'' ; 0



2




geoMean_A_ =: 3 : 0 



NB. same as before, but add d. 



d+(#%:(*/)) y 



)



funcB geoMean_A_`'' ; 2 3 4 


3.8845 4.8845 5.8845



funcB_B_ geoMean_A_`'' ; 2 3 4 


3.8845 4.8845 5.8845




the create verb only gets


called when you do conew, and so d is

not defined for


non-instanced locale.  one way to

fix this is to have a


default value for d that will get

overwritten with the


create verb so that it both works with

the "raw"


locale and instances.


________________________________


From: 'Jon Hough' via Programming


<[email protected]>


To: [email protected]



Sent: Friday, September 1, 2017 8:48

AM


Subject: Re: [Jprogramming] Passing

class


member gerund to verb in another

locale





Hi Pascal.


Thanks for the response. You are

correct in this case. Not


to move the goal posts, but 



funcB_B_ geomean_A_`'' ;




will not work


if geoMean is redefined to be




geoMean_A_ =: 3 : 0



NB. same as before, but add


d.



d+(#%:(*/)) y



)





The variable


d was created in myA's create verb.

This is not visible


from _A_ locale.




I will repost the entire (modified)

source


below. Note that getAvg__myA calls

funB_B_ with gerund


geoMean__myA. 






coclass


'A'





create=: 3 : 0



d=:y



)




geoMean=: 3 : 0




d+(#%:(*/)) y



)




myVerb=: 3 : 0



((geoMean )  ; (+/%#)) y



)




getAvg=: 3 : 0



data=.y



funcB_B_ (myVerb_A_ `''); data



)








cocurrent


'B'




NB. accepts the object ref as param.



NB. helper verb, for special


case of



NB. classes with a


member verb called myVerb.



funcB2=: 3 : 0



'obj data'=: y




verb=. 3 : ' myVerb__obj


y'



funcB ((verb f.)


`'');data



)





NB. More general verb, accepts any

verb



NB. (assuming verb is callable


from this locale)



funcB=: 3


: 0



'vrb data' =:


y



f=: vrb `:6



f data



)




myA=: 1 conew 'A'



geoMean__myA 1 2 3   NB. no

problem here



   getAvg__myA 1 2 3   NB.


error here





--------------------------------------------



On Fri, 9/1/17, 'Pascal


Jasmin' via Programming <[email protected]>


wrote:




Subject: Re: [Jprogramming] Passing

class


member gerund to verb in another

locale



To: "[email protected]"


<[email protected]>



Date: Friday, September 1,


2017, 8:19 PM




funcB_B_ geomean_A_`'' ;



data



do not use f. inside funcB.  f.

will



lose locale info




     



From: 'Jon Hough' via


Programming <[email protected]>



  To: [email protected]




  Sent:


Friday, September 1, 2017 1:09 AM



  Subject: Re: [Jprogramming]

Passing class



member gerund to verb in


another locale



  




I forgot to


add a definition of funcB 




cocurrent 'B'




funcB=: 3 :


0



'vrb data' =:


y



f=: vrb



`: 6  NB. vrb is the


gerund



f data  NB.



call f. This creates the


error.



)





--------------------------------------------



On Fri, 9/1/17, 'Jon


Hough' via



Programming


<[email protected]>



wrote:




  Subject:



[Jprogramming] Passing class


member gerund to verb in



another locale



  To: "Programming



Forum" <[email protected]>



  Date: Friday, September 1,


2017, 2:03 PM



  



  My problem is,  I have


a



class 'A' say.



  and I have a locale



'B'.



  



  A contains



several verbs. I would like



  to pass a verb



(or gerunds of the verbs), let's call

it



  myVerb, to some verb in B.


However, this



creates a


problem,



  as



  when



the B verb tries to call myVerb it



  cannot



find it, being in a different locale.

i.e. I


get a



  value error. I


attempted to use fix (f.) to



get myVerb



  


explicitly, but this only



  works if myVerb does not contain

any



  other verbs from A.



  



  This is the contrived example,

that is



  essentially the same as my


real problem, but



stripped


of



  superfluous


things:



  



  NB. A is some class with



several



  verbs.



  


coclass



'A'



  



  



  


create=: 3 : 0



  d=:y 



  )



  



  NB.


some



verb in A



  geoMean=: 3 : 0



  (#%:(*/)) y



  )



  



  



  NB. I want



to pass this to another


verb



  in another



locale.



  NB. Note that it calls geoMean.



  myVerb =: 3 : 0



  ((geoMean



f.)  ; (+/%#)) y



  )



  



  



  NB. calling a verb in B



  getAvg=: 3 : 0



  data=.y



  funcB_B_ ( myVerb f. `''); data



  )



  



  NB.



create my instance of A



  myA =: 0 conew



'A'



  NB. call myVerb. No


problem



here!



  myVerb__myA 1 2 3




NB. pass


myVerb to funcB_B_



  


getAvg__myA 1 2



3



  NB. this gives an error




|value error:


geoMean



  |   ((geoMean 


  




  


f.);(+/%#))y



  



  



  




Solutions:



  


(1) One solution is to make



funcB_B_ a



  


conjunction / adverb. But in



reality, I want to send several



  verbs to



funcB together. 



  (2) Another solution is


to



send the



  instance reference of A to


funcB



(i.e. just send the


whole



  of myA to


funcB).



But I would prefer


not to send the whole




object, as it then makes B less

flexible,


because I may



want



  to call funcB_B_ without


the need for



a class


instance, just



  a


standalone



verb.



  (3) Another solution is to


not call



any



  other verbs of myA inside


myVerb__myA.



This is not


a



  realistic solution as


A could



be quite


complicated.



  



  



  Is there a better way?



  



  Just to


explain my motivation, I am



  trying to replicate the

functionality


most



languages that



  have first-class


functions



possess - to pass


arbitrary



  function(s)



to



  other functions and call them.



  e.g. in  Python



  



  # myVerb is a Python function,

and



  could be a member method of


some class.



someData is


just



  some data




def funcB


(myVerb, someData):



   


  return



myVerb(someData,



  someOtherData)



  



  


Obviously J doesn't have



first class



  


functions in this sense, but



with gerunds, I was hoping to



  be able to



recreate the functionality.




  




----------------------------------------------------------------------



  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

----------------------------------------------------------------------

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