[Jprogramming] constant substitution

Hauke Rehr hauke.rehr at uni-jena.de
Sun Feb 16 15:38:20 UTC 2020


Sorry, I thought I had done it tacitly
but your examples seem to prove me wrong.
(Maybe I didn’t understand the concept
  of “semi-tacit” and where it applies.)
Of course we want to have late binding
available but there are also cases when
early binding is preferred.
My confusion is due to a sentence I thought
was tacit but didn’t show the benefits of
early binding.
Thanks for the explanation.

Am 16.02.20 um 15:23 schrieb 'Pascal Jasmin' via Programming:
> this all behaves correctly (did not understand your initial post)
> 
> "N
> 
> "1
> 
> +/"N
> 
> +/"1
> 
> (2 : 'u"v y')N
> 
> 2 : 'u"v y'1
> 
> 3(2 : 'u"v y')N
> 
> 3 (2 : 'u"v y') 1
> 
> 3 (2 : 'u"v y') 1
> 
> (3) (2 : 'u"v y') 1
> 
> 3(2 : 'u"v y')N
> 
> (3) (2 : 'u"v y') 1
> 
> M =: 3
> 
> M(2 : 'u"v y')N
> 
> (3) (2 : 'u"v y') 1
> 
> What you are actually commenting/complaining about is that explicit code should substitute global variables inside the explicit code.  This also applies to verb definitions.
> 
> It will behave as you want if you use tacit code.  The concept of "semi-tacit" modifiers are explicit definitions that do not refer to x or y.
> 
> so,
> 
> (3) (2 : 'u"v') 1
> 
> 3"1
> 
> does "compile"/substitute away the explicit code.
> 
> The reason this design/behaviour is useful is that you can use explicit code to late bind to variables, and tacit code to early bind.  J would need a constant directive to consider substitutions.
> 
> One method to get what you want for code that uses constants that are usefully changed prior to load is to have an init_verb called at the end of the script that reassigns (tacit) verbs based on constant values.
> 
> 
> 
> 
> On Sunday, February 16, 2020, 09:02:47 a.m. EST, Hauke Rehr <hauke.rehr at uni-jena.de> wrote:
> 
> 
> 
> 
> 
> I don’t have any concrete example that’s actually
> expensive in terms of time or space (where space
> means “memory”) but in place of >: in the verb
> example, there could be any function, it could
> take hours. This is no less true for conjunctions.
> And I don’t want this to be called each and every
> time I use it when the arguments have already
> been given when defining the verb.
> 
> Furthermore, this may be arbitrarily deeply nested.
> Say you build a couple of conjunctions atop of
> each other, you use the derived verb to define
> another one and maybe a library on top
> of them where it will be called routinely.
> 
> It is a good idea to evaluate constant expressions
> as soon as possible and that’s why J does it in the
> case of functions. I don’t see any reason to treat
> conjunctions differently.
> 
> Maybe I’ll make up a resource demanding example
> but the point should be clear without.
> 
> Am 16.02.20 um 10:22 schrieb bill lam:
>> Why do you think there will be major savings of
>> computational resources? Can you give a concrete
>> example?
>>
>> Sun, 16 Feb 2020, Hauke Rehr написал(а):
>>> Hello everybody,
>>>
>>> I recently stumbled upon some at least
>>> for me counterintuitive (read: puzzling) behaviour:
>>>
>>> In a verb like (>: X) {~ ], when X is a defined constant,
>>> the constant expression (>: X) is substituted in the verb (as expected)
>>> but in a conjunction M c N, when M and N are defined constant nouns,
>>> constant expressions are not substituted in c’s body (not expected)
>>>
>>> I would not want m c n to be evaluated time and again
>>> when some part of it, just like in the case of the verb above,
>>> could be evaluated once when defining the derived verb.
>>> This should result in major savings of computational
>>> resources so I’d have expected J to do this.
>>>
>>> could anyone tell me why this is different from verbs?
>>>
>>> kind regards,
>>> Hauke Rehr
>>> (Jena, Germany)
>>>
>>>
>>> -- 
>>> ----------------------
>>> mail written using NEO
>>> neo-layout.org
>>>
>>> ----------------------------------------------------------------------
>>> For information about J forums see http://www.jsoftware.com/forums.htm
> 
>>
> 

-- 
----------------------
mail written using NEO
neo-layout.org



More information about the Programming mailing list