Waldek Hebisch <hebi...@math.uni.wroc.pl> writes:

| Gabriel Dos Reis wrote:
| > 
| > Waldek Hebisch <hebi...@math.uni.wroc.pl> writes:
| > 
| > | I would avoid '=='.  Currently when '==' defines function with
| > | no arguments and no mode it is conveted to a macro ('==>').
| > | Given that semantics of '==>' is quite different of _expected_
| > | semantics of '==' this is rather weird irregularity.
| > 
| > I would think the opposite: if there is there is no modemap or type
| > declaration, then it surely can only be observed locally and it has all
| > the semantics of a local constant, or a macro!  I suspect that -may-
| > also have been the reasoning behind Aldor's choice.
| >
| 
| 
| This is reasonable choice if you _have to_ give meaning to '=='
| in such cases. 

Indeed, all flavours of AXIOM support the following style

   SomeFunctor(): Public == Private where
     Public == some category expression
     Privae == some domain expression

I am unconvinced of the value of requiring that to be written as

   SomeFunctor(): Public == Private where
     Public ==> some category expression
     Privae ==> some domain expression

>From my point of view, a macro is a `papering over some pesky imperfection'.
The definition of domain or a category is fundamental and macros should
not be the first thing people have to encounter.
And when I want to attract people used to languages with similar syntax
(hello Haskell!), I don't even want to given them incentives to ridicule
the syntax.

| But signaling error seems better.
| 
| For example, look at:
| 
|     dummy == new()$SE :: F
| 
| in combfunc.spad.pamphlet.  This is _very_ unlike constants.

In fact, I think this is an example that is illustrative of the constant
vs. nullary function dichotomy.  
In this case `dummy' is an abstraction that is supposed to be
generative, e.g. evaluated every time and generate new value.  That is
called a function and it should have been written as

    dummy(): SE == new()$SE::F

The inlining machinery will take care of making sure a call to dummy()
is in fact inlined (which pretty much is the case for all flavours of
AXIOM for such a simple expression).

| IMHO explicitly writing
| 
|     dummy ==> new()$SE :: F
| 
| would be much clearer.

I would argue that the function definition is much more reflective of
the intent and more elegant.  Writing it as a macro only hides the
original intent, it does not make it clearer.

-- Gaby

-- 
You received this message because you are subscribed to the Google Groups 
"FriCAS - computer algebra system" group.
To post to this group, send email to fricas-devel@googlegroups.com.
To unsubscribe from this group, send email to 
fricas-devel+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/fricas-devel?hl=en.

Reply via email to