"Bill Page" <[EMAIL PROTECTED]> writes: > On Thu, May 15, 2008 at 4:24 AM, Martin Rubey wrote: > > ... > > In this spirit: if there are good reasons for loops and conditionals > > introducing new scope, I'm all for it. In that case, I'd argue that the > > spec of Aldor should also change. But, as I said before, in case of > > doubt, I'd rather follow the aldor spec. > > I think there are good reasons, therefore I would encourage you to > pursue the idea that the spec of Aldor should also change.
Could you please repeat the reason to me. So far I can only see the drawback that if cond then x := f() else x := g() h(x) becomes x: sometype if cond then x := f() else x := g() h(x) By the way, how will this work in the interpreter? I.e., do you think it makes sense to force a rewrite of the currently legal f x == (if zero? x then z := 0 else z := 1/x; g z) to f x == (z := if zero? x then 0 else 1/x; g z) I'm *not* saying that the first form is better, but I doubt that one of the two is *always* better. However, the first form becomes illegal SPAD and interpreted language is to be (as far as possible) identical. > > To be honest, I think relying on these scoping rules seems to me bad style > > anyway, so the rules shouldn't matter too much. Giving a warning would be > > good though. > > I disagree strongly with this. I think the scoping rules matter a great > deal. Clear semantics are necessary for compiler development. It is > essential that a programmer is able to rely on exactly what the rules are in > any given situation. And it is important that these rules be simple, powerful > and allow freedom of expression. Sorry, I was not precise enough, it seems: I did not intend to say that it wouldn't matter to have rules. Only, that it wouldn't matter too much what these rules are. > >> Probably. But, they also decided that a variable and a local function > >> must have at most one mode. > > > > Hm, I doubt that this was a decision. I think it was rather "too lazy to > > implement this right now." As a hint: there are quite a few comments like > > "should be local but conditional", and "un-export when the compiler accepts > > conditional local functions!". > I do not see how conditional local functions has anything to do with modes of > variables and local functions. Right now only exported functions can have > multiple modes. This allows for a polymorphic style of coding when calling > library functions - i.e. identically named functions (usually) perform > generically similar functions. > > While allowing multiple "modes" for variables and local functions, so that > > f:Integer > f:Float > f:Integer -> Integer > f:Float -> Float > > refer to two *different* variables and and two different functions all with > the same name in the same module would in principle be be possible (and is > allowed in some programming languages), it is not clear that such local > polymorphism is of much advantage. Since code modules in Axiom are usually > short, of two or three pages in length at most, the economy and semantic > connotation of using the same name for something adds very little to the > readability of an algorithm. At least the impossibility to overload local functions is a huge drawback of current SPAD in my actual work. And since I adhere to the principle that Integer -> Integer is a type just as any other type, I do not see why one would want to make a difference there. (I admit I didn't think through why variable overloading is forbidden in Aldor, but so far I didn't need that anyway). Note that one of the most fundamental reasons why the species (AKA combinat) project doesn't work well with panAxiom / SPAD, is that functions are treated specially in panAxiom / SPAD. If you can come up with a SPAD-compatible replacement for the construct SPECIES == (L: LabelType) -> CombinatorialSpecies L; Plus( F: SPECIES, G: SPECIES )(L: LabelType): CombinatorialSpecies(L) == add [...] you shall be praised and I'll stop talking about language semantics from now on and refer to you instead. Martin ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ open-axiom-devel mailing list open-axiom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open-axiom-devel