Currently, since all of the time it is a domain error, then Raul is of course right that most of the time its a mistake. J will let you call =. after =: though, 3 : 'a=. a + 2' 2 |value error: a | a=. a+2 a=: 2 3 : 'a=. a + 2' 2 4 a 2 3 : 'a [ a=. a + 2' 2 4 3 : 'a=: a=. a + 2' 2 |domain error | a =:a=.a+2
so, I'm not sure if the possibility of confused intent deserves a domain error just because of the possibility. The above is often a mistake where the writer forgot to initialize a variable which only gets discovered when you reload the code. Even if it is intentional, its not a recommended choice for a local variable because you can choose any name, and the name you chose will cause confusion later. It appears also that my suggested behaviour already is applied to the base locale, or at least the console. My suggestion also, I think, is consistent with the behaviour of most other languages, and provides a way to do something that has no easy workaround. I'd suggest also that most of the time, using =: after =. has the suggested intent, and so it would be doing "what you mean". ----- Original Message ----- From: Don Guinn <[email protected]> To: Programming forum <[email protected]> Cc: Sent: Thursday, June 19, 2014 4:22:03 PM Subject: Re: [Jprogramming] suggestion for =. You can refer and modify global names that are shadowed by local names by adding the locale to the name. a=:1 y=:3 lg=: 3 : 0 smoutput a,y,a__,y__ 'a y a__ y__'=.4 5 6 7 a,y,a__,y__ ) lg 2 1 2 1 3 4 5 6 7 a,y 6 7 Notice that adding the locale to the name makes =. work like =: . On Thu, Jun 19, 2014 at 12:46 PM, Raul Miller <[email protected]> wrote: > I am going to disagree with you here. > > The reason =: after =. is an error is because most of the time when that > happens it's a mistake. So informing the user of the mistake is the best > language design choice for that case. > > "Not breaking user code" is a virtue when making changes in a language, but > it's not the only relevant issue. > > Thanks, > > -- > Raul > > > > On Thu, Jun 19, 2014 at 11:53 AM, 'Pascal Jasmin' via Programming < > [email protected]> wrote: > > > currently the following code generates a domain error at the ('f') =: y > > line. > > > > testlocal =: 3 : 0 > > f =. 33 > > assign =. 4 : '(x) =: y' > > > > 'f' assign f + y > > > > ('f') =: f+y > > NB. f =: f+y > > f > > ) > > > > testlocal 2 > > |domain error: testlocal > > | ('f') =: f+y > > f > > 35 > > > > the commented line also generates the same error. > > > > My suggestion is that all of the above code lines should leave the global > > variable f unchanged. The user benefit is being able to use external > > functions that create assignments (can only use =:) with the "shaddowed" > > local variable. Includes benefits of modifying x,y,u,v while only > > mentioning the parameter once in a statement, and possibly allowing > changes > > to values within tacit expressions without relying on global/external > > variables. > > > > I claim that there would not be any impact to existing user code, because > > =: after =. is currently a domain error, and calling an external > assignment > > function on a name that duplicates a local assignment is more likely to > be > > unintended behaviour rather than a clever way around the domain error > that > > would occur under direct global assignment. Advice to function writers > to > > name their local variables differently than the globals they access is > > under their control. Though the simple convention of not naming local > > variables to the same names as accessed globals is quite sufficient, an > > additional workaround could be made that a fully localed name would > access > > the global. > > ---------------------------------------------------------------------- > > 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
