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 <programm...@jsoftware.com> 
wrote:

 Subject: Re: [Jprogramming] Passing class member gerund to verb in another 
locale
 To: "programm...@jsoftware.com" <programm...@jsoftware.com>
 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
 <programm...@jsoftware.com>
 To: programm...@jsoftware.com
 
 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 <programm...@jsoftware.com>
 wrote:
 
 
 Subject: Re: [Jprogramming] Passing
 class member gerund to verb in another locale
 
 To: "programm...@jsoftware.com"
 <programm...@jsoftware.com>
 
 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
 
 <programm...@jsoftware.com>
 
 To: programm...@jsoftware.com
 
 
 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 <programm...@jsoftware.com>
 
 wrote:
 
 
 
 Subject: Re: [Jprogramming] Passing
 class
 
 member gerund to verb in another
 locale
 
 
 To: "programm...@jsoftware.com"
 
 <programm...@jsoftware.com>
 
 
 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 <programm...@jsoftware.com>
 
 
   To: programm...@jsoftware.com
 
 
 
   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
 
 <programm...@jsoftware.com>
 
 
 wrote:
 
 
 
   Subject:
 
 
 [Jprogramming] Passing class
 
 member gerund to verb in
 
 
 another locale
 
 
   To: "Programming
 
 
 Forum" <programm...@jsoftware.com>
 
 
   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

Reply via email to