Francois Maltey <[EMAIL PROTECTED]> writes:

> Dear Ralf and all, 
> 
> > In particular [List and] Record provide such bracket function of type [...]
> > which allows the usual list construction.
> > 
> > (in Record(a: Integer, b: String, c: Float))
> >    bracket: (Integer, String, Float) -> %
> > which allows
> > 
> >    Arec: Record(a:Integer, b:String, c:Float) := [123,"azerty",1.2e-3]
> > 
> > What else would you want?
> 
> Indeed, the bug is in my mind... Let me explain :
> 
> In my mind theses two cases aren't equivalent :
> 
> // 1 // List   is very easy. 
> 
>     I only type L := [1,2,3] without type 
>  and I play with L.1, L.2...
> 
> // 2 // Record is too subtle.
> 
>     Not only because I use less Record than List 
>  but because // A // I must declare this type 
>          and // B // I must choose the field name. (It's too complex for me)

In fact, A follows from B.  In axiom, the interpreter cannot coerce [1, "s"]
automatically to Record(a: Integer, b: String), because it has no way to guess
the labels.

Possibly, this is the reason why Aldor allows Records also *without* labels:

-------------------------------------------------------------------------------
%1 >> #include "aldor"
                                           Comp: 70 msec, Interp: 10 msec
%2 >> #include "aldorinterp"
                                           Comp: 40 msec, Interp: 0 msec
%3 >> import from Integer, String, Record(Integer, String)
                                           Comp: 10 msec, Interp: 0 msec
%4 >> a := [1, "s"]
  () @ Record(AldorInteger, String)
                                           Comp: 0 msec, Interp: 40 msec
%5 >> (x,y) := explode a
  () @ AldorInteger, String
                                           Comp: 0 msec, Interp: 0 msec
%6 >> x
1 @ AldorInteger
                                           Comp: 0 msec, Interp: 60 msec
%7 >> y
s @ String
                                           Comp: 0 msec, Interp: 0 msec

%8 >> import from Boolean, Record(String, Boolean)
                                           Comp: 0 msec, Interp: 0 msec
%9 >> b := ["hi", true]
  () @ Record(String, Boolean)
                                           Comp: 0 msec, Interp: 10 msec
%10 >> (r, s) := explode b
  () @ String, Boolean
                                           Comp: 0 msec, Interp: 0 msec
%11 >> r
hi @ String
                                           Comp: 0 msec, Interp: 0 msec
%12 >> s
T @ Boolean
                                           Comp: 0 msec, Interp: 0 msec

-------------------------------------------------------------------------------

of course, the Aldor interpreter does very little guessing, but note that from
line %8 onwards, we have two Record types in scope, and the Aldor interpreter
is still able to infer the type of b := ["hi", true].

However, turning to Axiom again, as soon as we have a type Any in scope, the
interpreter has no way to know whether we mean List Any or Record(String, INT)
with ["a", 1].

We could, of course, unexpose Any, and introduce unnamed Records, a function
explode and multiple values.  I'm not sure whether this wouldn't create other
usability problems.  

By the way Record(Integer, Integer) is not allowed in Aldor. I do not
understand why, isn't that a bug:

%13 >> import from Record(String, String)
      ...........................^
[L13 C29] #1 (Error) Duplicate selector/type pair within Record, RawRecord or 
          Union.
 

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

Reply via email to